teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

ソースコードと実行結果を追記

2016/11/25 08:08

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
@@ -2,4 +2,85 @@
2
2
  [http://stackoverflow.com/a/36540388/6299234](http://stackoverflow.com/a/36540388/6299234)
3
3
 
4
4
  で、私の手元の環境(*)では、使用するオプションハンドラーを その回答で提示されているクラスに切り替えると、うまく動作しました。
5
- * Mac OSX 10.9, JDK1.7
5
+ * Mac OSX 10.9, JDK1.7
6
+
7
+ Main.java
8
+ ```java
9
+ import org.kohsuke.args4j.CmdLineException;
10
+ import org.kohsuke.args4j.CmdLineParser;
11
+
12
+ public class Main {
13
+ public static void main(String[] args) {
14
+ Shell shell = new Shell();
15
+
16
+ CmdLineParser parser = new CmdLineParser(shell);
17
+ try {
18
+ parser.parseArgument(args);
19
+ } catch (CmdLineException e) {
20
+ e.printStackTrace();
21
+ return;
22
+ }
23
+
24
+ for (String s : shell.vcm) {
25
+ System.out.println(s);
26
+ }
27
+
28
+ }
29
+
30
+ }
31
+ ```
32
+ Shell.java
33
+ ```java
34
+ import org.kohsuke.args4j.Option;
35
+
36
+ public class Shell {
37
+
38
+ @Option(name = "-v", metaVar = "x", handler = WellBehavedStringArrayOptionHandler.class)
39
+ static String[] vcm;
40
+
41
+ }
42
+ ```
43
+ WellBehavedStringArrayOptionHandler.java
44
+ ```java
45
+ import org.kohsuke.args4j.CmdLineException;
46
+ import org.kohsuke.args4j.CmdLineParser;
47
+ import org.kohsuke.args4j.OptionDef;
48
+ import org.kohsuke.args4j.spi.Messages;
49
+ import org.kohsuke.args4j.spi.OptionHandler;
50
+ import org.kohsuke.args4j.spi.Parameters;
51
+ import org.kohsuke.args4j.spi.Setter;
52
+
53
+ public class WellBehavedStringArrayOptionHandler extends OptionHandler<String> {
54
+ public WellBehavedStringArrayOptionHandler(CmdLineParser parser, OptionDef option,
55
+ Setter<String> setter) {
56
+ super(parser, option, setter);
57
+ }
58
+
59
+ @Override
60
+ public String getDefaultMetaVariable() {
61
+ return Messages.DEFAULT_META_STRING_ARRAY_OPTION_HANDLER.format();
62
+ }
63
+
64
+ @Override
65
+ public int parseArguments(Parameters params) throws CmdLineException {
66
+ int counter;
67
+ for (counter = 0; counter < params.size(); counter++) {
68
+ String param = params.getParameter(counter);
69
+ if (param.startsWith("-")) {
70
+ break;
71
+ }
72
+ setter.addValue(param);
73
+ }
74
+ return counter;
75
+ }
76
+ }
77
+ ```
78
+ 実行時引数
79
+ ```
80
+ -v "2 1" 1
81
+ ```
82
+ 実行結果
83
+ ```
84
+ 2 1
85
+ 1
86
+ ```