为什么getAnnotation(Parsed.class).field()返回String []?(它应该返回String,因为它将输入作为String)

时间:2019-05-02 11:07:55

标签: java reflection annotations field univocity

我有以下代码。

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 个答案:

答案 0 :(得分:4)

根据UniVocity github存储库:

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

只有一种方法field()的返回类型为String[]而不是String

 String[] field() default {};  

编辑:

对于问题的第二部分,即为什么允许Parsed(field = "Abc")-这是因为:

  

如果元素类型是数组类型,则不需要使用   大括号指定元素值对的元素值

我引用了this doc中的上述声明,您可以参考。附加参考:SO post