亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有 picocli 的可擴展應用程序。最佳實踐問題

帶有 picocli 的可擴展應用程序。最佳實踐問題

Qyouu 2022-01-06 19:48:13
假設我的項目有很多邏輯,并且有一些入口點,它們是 CLI 命令。我用 注釋我的入口點@Command,初始化我@Parameters和@Option注釋的字段并執行邏輯,不再需要 CLI。在我看來,為main每個帶@Command注釋的類聲明 1 個方法適合我,但是,我不確定這是否是個好主意。也許某種CommandFactory是必要的?我之前從未構建過 CLI 應用程序或使用過 picocli,所以如果我的思考過程有誤,請指出。
查看完整描述

1 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

main對于@Command作為入口點的每個方法都有一個單獨的方法是完全沒問題的。main需要該方法,以便可以從命令行獨立調用該命令。


例如:


@Command(name = "hello")

class Hello implements Runnable {

    public static void main(String[] args) {

        CommandLine.run(new Hello(), args);

    }

    public void run() { System.out.println("hello"); }

}


@Command(name = "bye")

class Bye implements Runnable {

    public static void main(String[] args) {

        CommandLine.run(new Bye(), args);

    }

    public void run() { System.out.println("bye"); }

}

一種例外情況是當您的應用程序具有帶有子命令的命令時。在這種情況下,您只需要main為頂級命令提供方法,而不需要為子命令提供方法。


帶有子命令的示例:


@Command(name = "git", subcommands = {Commit.class, Status.class})

class Git implements Runnable {

    public static void main(String[] args) { // top-level command needs main

        CommandLine.run(new Git(), args);

    }

    public void run() { System.out.println("Specify a subcommand"); }

}


@Command(name = "commit")

class Commit implements Runnable {

    @Option(names = "-m") String message;

    @Parameters File[] files;


    public void run() {

        System.out.printf("Committing %s with message '%s'%n",

                Arrays.toString(files), message);

    }

}


@Command(name = "status")

class Status implements Runnable {

    public void run() { System.out.println("All ok."); }

}

注意,main當有子命令時,只有頂級命令需要一個方法。即使使用子命令,也不需要工廠。


查看完整回答
反對 回復 2022-01-06
  • 1 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號