1

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

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

示例代码应打印:

维度 = 2 和底部类型 = 类 java.lang.Float
维度 = 3 和底部类型 = 类 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 s 代表 ArrayList。

4

1 回答 1

1

由于类型擦除,这是不可能的。

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

于 2013-01-19T00:56:56.993 回答