$ java -jar Mumu.jar -a foo
OK
$ java -jar Mumu.jar -a bar
OK
$ java -jar Mumu.jar -a foobar
foobar is not a valid value for -a
10
A
cevap
4
commons-cli doğrudan, yani desteklemediği En basit çözüm muhtemelen bir seçeneğin değerini aldığınızda kontrol etmektir.
6
Bu türden bir davranışı daha önce istedim ve daha önce sağlanmış bir yöntemle bunu yapmak için hiçbir yolla karşılaşmadım. Bu varolmayan demek değil. topal bir şekilde bir tür kod eklemektir kendiniz gibi:
private void checkSuitableValue(CommandLine line) {
if(line.hasOption("a")) {
String value = line.getOptionValue("a");
if("foo".equals(value)) {
println("OK");
} else if("bar".equals(value)) {
println("OK");
} else {
println(value + "is not a valid value for -a");
System.exit(1);
}
}
}
Açıkçası, muhtemelen bir enum
ile, ama bu olmalı/else if uzun daha bunu yapmak için daha güzel yollar var olacağını tüm' d ihtiyacım var. Ayrıca bunu derlemedim, ama işe yarayacağını düşünüyorum.
Bu örnekte, "-a" anahtarının zorunlu hale getirilmemesi de zorunludur, çünkü bu soruda belirtilmemiş.
6
Diğer yol, Seçenek sınıfını genişletmek olabilir. İşte biz bunu yaptık:
public static class ChoiceOption extends Option {
private final String[] choices;
public ChoiceOption(
final String opt,
final String longOpt,
final boolean hasArg,
final String description,
final String... choices) throws IllegalArgumentException {
super(opt, longOpt, hasArg, description + ' ' + Arrays.toString(choices));
this.choices = choices;
}
public String getChoiceValue() throws RuntimeException {
final String value = super.getValue();
if (value == null) {
return value;
}
if (ArrayUtils.contains(choices, value)) {
return value;
}
throw new RuntimeException(value " + describe(this) + " should be one of " + Arrays.toString(choices));
}
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
} else if (o == null || getClass() != o.getClass()) {
return false;
}
return new EqualsBuilder().appendSuper(super.equals(o))
.append(choices, ((ChoiceOption) o).choices)
.isEquals();
}
@Override
public int hashCode() {
return new ashCodeBuilder().appendSuper(super.hashCode()).append(choices).toHashCode();
}
}
İlgili konular
- 1. aşağıdaki gibi olası değerlere sahip
- 2. , sadece belirli değerleri nasıl grafikleyebilirim?
- 3. nasıl değerlerin listesini içeren bir dizi var angularjs
- 4. Öğede olduğu gibi, öğenin animasyonunda olduğu gibi,
- 5. Belirli bir örnekte perl'de async'yi anlama
- 6. Facebook Graph API'daki 'cinsiyet' alanının olası değerleri nelerdir?
- 7. Belirli bir dizeyi içeren dizi listesini denetleme yöntemi
- 8. Excel VBA'da bir aralıktaki benzersiz değerlerin listesini nasıl alabilirim?
- 9. Örnekte olduğu gibi bir getTotal() işlevini çalıştırmak için bir firebase fabrikası genişletilirken güncellenmiş $$ kullanabilir miyim?
- 10. hatası Aşağıdaki örnekte anahtar kelime
- 11. dönen elemanı sınıfı ++ Aşağıdaki örnekte
- 12. Bazı verileri içeren hücreyi içeren bir tablo satırı nasıl kaldırılır?
- 13. Durum makinesi iş akışında belirli bir rol için olası geçişler listesini nasıl alabilirim?
- 14. Bazı değerlerin bir numpy dizisinde yer değiştirmesi
- 15. SQL Alt sorguda olduğu gibi
- 16. SaveFileDialog sadece belirli bir uzantıya
- 17. Gizleme: java kodlanmış değerleri gizlemek
- 18. Python zaman değerleri listesini nasıl sıralayabilirim?
- 19. Java: Bir metin dosyası okurken, belirli bir dizeyi içeren belirli bir satırı nasıl okuyabilirim?
- 20. Java: HashMaps'in bir listesini oluşturun
- 21. GetOrElse'nin yaptığı gibi bir Seçenek Türü döndüren ancak seçenek türü
- 22. yapılandırmak yalnızca belirli alanlar aşağıdaki gibi bir senaryoyu yaşıyorum
- 23. Yeni değerleri kabul etmeden bir ComboBox araması
- 24. JAXB, String kullanıyor olduğu gibi
- 25. Fonksiyonun startwith() 'ın doğru olduğu değerlerin değerlerini nasıl alabilirim?
- 26. angularjs - Birden ng tıklama - Aşağıdaki örnekte
- 27. Php kullanarak bir MySQL veritabanında olası değerleri nasıl alabilirim?
- 28. Bir veritabanı gibi NSUserDefaults değerleri nasıl depolanır?
- 29. Java/Guava'daki bazı Anahtarlar için bir Haritadaki tüm Değerleri Alın?
- 30. Lucene: Bazı belirli alanları nasıl desteklenir
Bu hala geçerli mi? – ksl