【问题标题】:ArrayList reflection [duplicate]ArrayList反射[重复]
【发布时间】:2012-11-07 13:48:17
【问题描述】:

可能重复:
How do I find out what type each object is in a ArrayList<Object>?
Knowing type of generic in Java

如何使用 Java 中的反射从我的 ArrayList 检索类型 Foo

ArrayList<Foo> myList = new ArrayList<Foo>();

【问题讨论】:

  • 类型擦除 --> 无法在运行时获取泛型类型!
  • 你不能使用反射但是,让我们跳出框框思考一下,你的 ArrayList() 的第一个元素的类是什么? ^^
  • @jlordo 除非是Field
  • @BrunoVieira 不,这是个坏主意!第一个(或任何其他)元素可能是类 Foo 的后代!!!

标签: java reflection arraylist


【解决方案1】:

你不能从值中得到这个类型,但是你可以从Field信息中得到。

public class Main {
    interface Foo { }
    class A {
        List<Foo> myList = new ArrayList<Foo>();
    }
    public static void main(String... args) throws NoSuchFieldException {
        ParameterizedType myListType = ((ParameterizedType) 
                                A.class.getDeclaredField("myList").getGenericType());
        System.out.println(myListType.getActualTypeArguments()[0]);
    }
}

打印

interface Main$Foo

可以检查字段、方法参数、返回类型和扩展类/接口,但不能检查局部变量或值

这些产生相同的结果。

List<Foo> myList = new ArrayList();
List<Foo> myList = (List) new ArrayList<String>();

你不能为

获取泛型类型
List myList = new ArrayList<Foo>();

【讨论】:

  • 如果您的列表实际上位于类级别字段中,并且该字段的类型具有特定的非泛型文字类型参数。
  • +1 我不得不挖掘这些信息一次。
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 2013-12-20
  • 2015-08-07
  • 1970-01-01
  • 2012-04-06
  • 2013-05-13
  • 2011-08-09
  • 2014-08-06
相关资源
最近更新 更多