Почему getAnnotation (Parsed.class) .field () возвращает String []? - PullRequest
1 голос
/ 02 мая 2019

У меня следующий код.

import com.univocity.parsers.annotations.Parsed;
import org.apache.commons.lang3.reflect.FieldUtils;
import java.lang.reflect.Field;

public class MyClass {
    public static void main(String args[]) {
        try{
            for (Field field : FieldUtils.getAllFieldsList(SpendsInputBean.class)) {
                String[] headerName = field.getAnnotation(Parsed.class).field();
//              ^
//              |____________(Shouldn't this be String)


                .
                .
                .
            }
        }catch(Exception ex){
            System.out.println(ex);
        }
    }
}

class X {
    @Parsed(field = "Abc")
    private String abc;
}

Мой вопрос Parsed(field = "Abc"), здесь поле принимает String в качестве ввода.Но когда я getAnnotation(Parsed.class).field(), он возвращается String[] вместо String.Почему это странное поведение?

Не должен ли getAnnotation(Parsed.class).field() вернуть String?

1 Ответ

4 голосов
/ 02 мая 2019

Согласно репозиторию UniVocity github:

https://github.com/uniVocity/univocity-parsers/blob/master/src/main/java/com/univocity/parsers/annotations/Parsed.java

Существует только 1 метод field() с типом возврата String[], а не String.

 String[] field() default {};  

РЕДАКТИРОВАТЬ:

Для второй части вопроса, например, почему Parsed(field = "Abc") допускается - это потому что:

Если элементтип является типом массива, поэтому нет необходимости использовать фигурные скобки для указания значения элемента пары элемент-значение

. Я цитировал приведенное выше утверждение из this doc который вы можете сослаться.Дополнительная ссылка: SO post .

...