2016-04-15 3 views

Antwort

0

Es ist nicht möglich, nur mit Anmerkungen zu arbeiten. Aber es ist möglich, mit Annotation und einem Scheck zu tun.

Sie können forbids in Annotationen verwenden, um Ihre Optionen auf die maximale Einschränkung zu setzen.

@Options(name="-a1", forbids{"-a2", "-a3", /*...*/, "-aN"}) 
T a1; 

@Options(name="-a2", forbids{"-a1", "-a3", /*...*/, "-aN"}) 
T a2; 

/*...*/ 

@Options(name="-aN", forbids{"-a1", "-a2", /*...*/, "-a(N-1)"}) 
T aN; 

Und Sie können einen Check in Ihrer Klasse hinzufügen, um die Option "Mindestens-eine-Einschränkung" für Ihre Optionen festzulegen.

if (a1 == null && a2 == null && /*...*/ && aN == null) { 
    throw new CmdLineException(); 
} 

Sie können Ausnahmemeldung gleiche mit der Meldung gesetzt angezeigt, wenn required Option für Konsistenz eingestellt.

+0

Alle "einfachen" CmdLineException-Ctors sind jetzt veraltet. Die nicht veralteten benötigen entweder eine Throwable oder sind wie die von Ihnen erwähnte und benötigen eine Localizable. Das Problem besteht darin, dass der gesamte Code, der zum Reproduzieren der fehlenden erforderlichen Optionen verwendet wird, package-privat ist und sich auf args4j ResourceBundle verlässt. Hast du einen Workaround? – Novaterata

Verwandte Themen