【问题标题】:Why getAnnotation(Parsed.class).field() returning String[]?(It should return String, as it is taking input as String)为什么 getAnnotation(Parsed.class).field() 返回 String[]?(它应该返回 String,因为它将输入作为 String)
【发布时间】:2019-05-02 11:07:54
【问题描述】:

我有以下代码。

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吗?

【问题讨论】:

  • 你用的是什么版本的univocity?
  • @rghome 我使用的是 2.5.3

标签: java reflection annotations field univocity


【解决方案1】:

根据 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

【讨论】:

  • 那怎么可能呢? field = "Abc"应该是field = {"Abc"}吧?
  • 好的。所以你的问题有两部分。我最初只回答了前半部分。请参阅我对您问题第二部分的编辑
  • @yajiv 你还满意吗? :)
猜你喜欢
  • 1970-01-01
  • 2016-11-27
  • 2019-10-12
  • 2021-11-07
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
相关资源
最近更新 更多