java - 反射(reflect)通用类

标签 java generics reflection

我认为这是不可能的,但让我们尝试一下:

是否可以编写例程analyzeArrayList() 以这种方式打印 ArrayList 的维度 和列表的底部类型。

示例代码应打印:

Dimension = 2 and Bottom type = class java.lang.Float
Dimension = 3 and Bottom type = class java.lang.Integer

我们假设参数 s 始终是 ArrayList 的实例, 不是其他类型的实例。请注意,列表可以为空,但不能为空。

  void analyzeArrayList(Object s)
  {
    int dimension;
    String typeString;

    //<Some code here!>

    System.out.println("Dimension = "+dimension+" and Bottom type = "+typeString);
  }



  Object s = new ArrayList<ArrayList<Float>>();
  Object t = new ArrayList<ArrayList<ArrayList<Integer>>>();

  .
  . 
  analyzeArrayList(s);
  analyzeArrayList(t);

对此的评论:

有趣的是,如果你有一个带有字段的对象

  ArrayList<ArrayList<Float>>

然后就可以写方法了

  void analyzeArrayList(Field s)

如果你知道 Field 代表 ArrayList。

最佳答案

这是不可能的,因为 type erasure

Java 仅在编译时考虑泛型。如果您有List<String>List<Integer> ,编译器知道列表来自不同的类型,这使得它能够在每个实例的基础上创建某种类型的类型安全环境。由于类型删除,在运行时,两个列表就像都包含对象并且彼此等效。

关于java - 反射(reflect)通用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13709387/

相关文章:

java - 使用 Java 在 Linux 上查找给定文件的根目录

java - 为什么接口(interface)方法要以对象作为参数

reflection - 如何使用仅部分名称作为方法字符串的 java 反射获取方法?

java - 在 Java 中使用 Reflection 递归查找 PropertyDescriptor

Java 从 servlet 调用 EJB

java - 我如何设置安全性以便我的服务器只接受来 self 的应用程序的请求

ios - 如何在集合类型约束中创建泛型?

Java 在分层生成器模式中避免类转换警告

java - 将 Getters/Setter 添加到一个基类

java - 图像动画未显示