【问题标题】:Trying to find class within List [duplicate]试图在列表中查找类[重复]
【发布时间】:2013-01-13 17:43:16
【问题描述】:

可能重复:
Get generic type of java.util.List

如何查看参数列表中的类型

private List<String> names;

我怎样才能知道它是一个字符串列表?我的目标是让这样的方法起作用:

public Field findFieldByObjectType(Class<?> clazz, Object obj) {
    for (Field field : clazz.getDeclaredFields()) {
        // if field type is List<obj>
        // return field
    }
}

【问题讨论】:

标签: java generics


【解决方案1】:

正如我在 cmets 中所说,这是在反射 https://stackoverflow.com/a/1942680/1317692 的帮助下可以实现的最接近的事情。 归功于 BalusC。

【讨论】:

    【解决方案2】:

    您可以对列表的元素使用instanceof 运算符或getClass() 方法。

    private List<String> names;
    

    变成

    private List names;
    

    类型擦除后。

    【讨论】:

    • 但是我怎样才能在元素上做 getClass() 呢?该列表甚至没有初始化
    • getClass() 在你应该初始化的时候在运行时工作。
    • @MooseMoose 你不能,因为.getClass() 是运行时操作,并且泛型类型在运行时被擦除(这称为类型擦除)。 IOW,没有List&lt;Something&gt;.class这样的东西,在运行时,它变成了List.class
    • 不,因为我只是从类中获取字段>,它永远不会被初始化
    • 那不是真的,当我打印 field.getGenericType() 它给了我 java.util.List
    猜你喜欢
    • 1970-01-01
    • 2021-10-19
    • 2013-02-21
    • 2013-11-17
    • 2018-06-26
    • 2021-01-23
    • 2019-01-15
    • 2020-09-10
    相关资源
    最近更新 更多