Язык SpEL - автоматическая инициализация нулевой ссылки - PullRequest
0 голосов
/ 25 июня 2019

Пожалуйста, посмотрите пример кода:

public static class MyTestClass {
    public List<Boolean> booleans = new ArrayList<>();
}

public static void main(String[] args) {
    SpelParserConfiguration config = new SpelParserConfiguration(true, true);

    MyTestClass myTestClass = new MyTestClass();

    SpelExpressionParser parser = new SpelExpressionParser(config);
    Object value = parser.parseExpression("booleans[1]").getValue(myTestClass); //exception

Я пытаюсь инициализировать логический список значениями по умолчанию. Проблема в том, что у логического класса нет конструктора по умолчанию, поэтому я получил исключение:

Caused by: java.lang.NoSuchMethodException: java.lang.Boolean.<init>()

Можно написать, как следует инициализировать новые объекты, если их нет в списке?

1 Ответ

1 голос
/ 26 июня 2019

Я сожалею, что функции авто-увеличения коллекции в SpEL работают, только если элемент имеет конструктор по умолчанию.

Если у вас нет веских причин для инициализации списка с помощью SpEL, я предлагаю вам использовать обычный вызов метода java, он намного быстрее, чем SpEL, а также вводить безопасно.

Если вы настаиваете на этом в SpEL, лучшее, что вы можете сделать, это:

List<Boolean> result =  parser.parseExpression( "{true,true,false,false,true}").getValue(List.class);
myTestClass.booleans = result;
...