jbock:無反射的Java命令列引數解析器
jbock 是一個命令列解析器,它使用與JCommander 和picocli相同的註解名稱。但是它不使用反射。它是一個 註釋處理器 ,可在編譯時生成自定義解析器。
JCommander 是一個非常小的 Java 框架,可以輕鬆解析命令列引數。您使用選項描述註釋欄位:
import com.beust.jcommander.Parameter; public class Args { @Parameter private List<String> parameters = new ArrayList<>(); @Parameter(names = { "-log", "-verbose" }, description = "Level of verbosity") private Integer verbose = 1; @Parameter(names = "-groups", description = "Comma-separated list of group names to be run") private String groups; @Parameter(names = "-debug", description = "Debug mode") private boolean debug = false; } |
然後你只需讓 JCommander 解析:
class Main { @Parameter(names={"--length", "-l"}) int length; @Parameter(names={"--pattern", "-p"}) int pattern; public static void main(String ... argv) { Main main = new Main(); JCommander.newBuilder() .addObject(main) .build() .parse(argv); main.run(); } public void run() { System.out.printf("%d %d", length, pattern); } } $ java Main -l 512 --pattern 2 512 2 |
jbock是無反射命令列解析器:
@Command abstract class DeleteCommand { @Option(names = {"-v", "--verbosity"}, description = "A named option. The return type reflects optionality.") abstract OptionalInt verbosity(); @Parameter( index = 0, description = {"A required positional parameter. Return type is non-optional.", "Path is a standard type, so no custom converter is needed."}) abstract Path path(); @Parameter( index = 1, description = "An optional positional parameter.") abstract Optional<Path> anotherPath(); @VarargsParameter( description = {"A varargs parameter. There can only be one of these.", "The return type must be List."}) abstract List<Path> morePaths(); @Option(names = "--dry-run", description = "A nullary option, a.k.a. mode flag. Return type is boolean.") abstract boolean dryRun(); @Option(names = "-h", description = "A repeatable option. Return type is List.") abstract List<String> headers(); @Option(names = "--charset", description = "Named option with a custom converter", converter = CharsetConverter.class) abstract Optional<Charset> charset(); // sample converter class static class CharsetConverter extends StringConverter<Charset> { @Override protected Charset convert(String token) { return StandardCharsets.UTF_8; } } } |
生成的DeleteCommandParser將一個字串陣列轉換為DeleteCommand的一個例項:
public static void main(String[] args) { DeleteCommand command = new DeleteCommandParser().parseOrExit(args); // ... } |
相關文章
- java 使用命令列引數(轉)Java命令列
- Java方法04:命令列傳遞引數、可變引數Java命令列
- Logstash 命令列引數命令列
- 命令列引數 opencv呼叫命令列OpenCV
- Go 接收命令列引數Go命令列
- C語言中的命令列引數C語言命令列
- MySQL登陸命令列引數MySql命令列
- main命令列引數輸入AI命令列
- Ghost命令列引數大全(轉)命令列
- shell指令碼的命令列引數 - todo指令碼命令列
- 命令列引數解析模組argparse的使用命令列
- Java對比有引數和無引數Java
- 使用argparse模組新增命令列引數命令列
- Go語言命令列程式和他們的引數Go命令列
- 7z命令列引數中的路徑命令列
- python獲取命令列引數的程式碼Python命令列
- Python命令列引數解析模組argparsePython命令列
- SpringBoot禁用命令列引數Spring Boot命令列
- Outlook for Microsoft 365 所有命令列引數ROS命令列
- TCL指令碼讀取命令列引數指令碼命令列
- 認識Spring引數解析器Spring
- Java——通過反射獲取函式引數名稱Java反射函式
- C#通過反射獲取類中的方法和引數個數,反射呼叫方法帶引數C#反射
- java 啟動命令 java -jar 如何追加引數JavaJAR
- Python中最好用的命令列引數解析工具Python命令列
- Rust 程式設計,讀取命令列引數Rust程式設計命令列
- linux核心命令列引數速查手冊Linux命令列
- C++ main函式命令列引數使用C++AI函式命令列
- Day18--命令列傳遞引數命令列
- 【C】 33_main 函式與命令列引數AI函式命令列
- 使用getopt_long()從命令列獲取引數命令列
- Spring自定義引數解析器設計Spring
- 【譯】10. Java反射——陣列Java反射陣列
- 反射如何獲取函式的引數名反射函式
- java函式陣列引數的複製問題Java函式陣列
- 命令列CALL程式時傳遞數字引數總結(轉)命令列
- 不學無數——初識反射反射
- Python 處理指令碼的命令列引數(二):使用clickPython指令碼命令列