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方法04:命令列傳遞引數、可變引數Java命令列
- Go 接收命令列引數Go命令列
- SpringBoot禁用命令列引數Spring Boot命令列
- MySQL登陸命令列引數MySql命令列
- main命令列引數輸入AI命令列
- python獲取命令列引數的程式碼Python命令列
- 命令列引數解析模組argparse的使用命令列
- Java對比有引數和無引數Java
- 認識Spring引數解析器Spring
- Go語言命令列程式和他們的引數Go命令列
- Python中最好用的命令列引數解析工具Python命令列
- 7z命令列引數中的路徑命令列
- Python命令列引數解析模組argparsePython命令列
- Day18--命令列傳遞引數命令列
- 使用argparse模組新增命令列引數命令列
- Outlook for Microsoft 365 所有命令列引數ROS命令列
- JWT+SpringBoot+SpringMVC引數解析器JWTSpring BootSpringMVC
- java 啟動命令 java -jar 如何追加引數JavaJAR
- Python測試框架pytest命令列引數用法Python框架命令列
- Rust 程式設計,讀取命令列引數Rust程式設計命令列
- C#通過反射獲取類中的方法和引數個數,反射呼叫方法帶引數C#反射
- Spring自定義引數解析器設計Spring
- Python 處理指令碼的命令列引數(二):使用clickPython指令碼命令列
- Python 處理指令碼的命令列引數(三):使用argparsePython指令碼命令列
- 【C】 33_main 函式與命令列引數AI函式命令列
- Python命令列引數定義及注意事項Python命令列
- linux的命令列解析引數之getopt_long函式使用Linux命令列函式
- Linux 命令列引數的三種風格 Unix/Posix、BSD、GNULinux命令列
- 做ftp專案中使用命令列引數及 ----python 命令列 解析模組 optparseFTP命令列Python
- 另一個go命令列引數處理器 - cmdrGo命令列
- 如何在 Fedora 30 中設定核心命令列引數命令列
- arp命令 引數
- tasklist命令 引數
- ipconfig命令引數
- Java列舉類、註解和反射Java反射
- 1.linux的命令列解析引數之getopt_long函式Linux命令列函式
- 不學無數——初識反射反射
- 無聊的數列