#java #command-line-interface #picocli
Вопрос:
У меня возникла проблема при рефакторинге моего кода, в котором используется picocli
Вот пример
@Command(name='-classA')
class A{
@Options(names = '-n1')
public int num1;
@Options(names = '-n2')
public int num2;
public void testA(){
System.out.println("class A Testing");
System.out.println(num1 num2);
}
}
@Command(name='-classB')
class B{
@Options(names = '-n1')
public int num1;
@Options(names = '-n2')
public int num2;
public void testB(){
System.out.println("class B Testing");
System.out.println(num1 num2);
}
}
В настоящее время мой инструмент cli работает следующим образом
java -jar poo.jar -classA -n1 -n2
java -jar poo.jar -classB -n1 -n2
Хотя оба класса A и B работают хорошо, при рефакторинге моего кода
Я хотел использовать интерфейс для размещения общих переменных в одном месте.
Подобный этому
interface MyInterface{
@Options(names = '-n1')
public int num1;
@Options(names = '-n2')
public int num2;
public int getNum1(){return num1;}
public int getNum2(){return num2;}
}
Однако, когда я запускаю свое приложение со всеми включенными опциями, оно выходит из строя при компиляции параметров интерфейса.
Неужели невозможно дать параметры переменным в интерфейсе?
Спасибо, что прочитали
Комментарии:
1. В java поля в интерфейсах являются константами: им присваивается значение во время компиляции, и это значение не может быть изменено во время выполнения. Таким образом, аннотирование полей в интерфейсе не будет работать, потому что picocli не сможет присвоить значение этим полям. Лучше вместо этого использовать класс.