我认为这是不可能的,但让我们试试:
是否可以编写例程analyzeArrayList() 以这种方式打印ArrayList的维度 和列表的底部类型。
示例代码应打印:
Dimension = 2和Bottom type = class java.lang.Float
Dimension = 3,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 s代表ArrayList。
答案 0 :(得分:1)
由于type erasure,这是不可能的。
Java只在编译时考虑泛型。如果您有List<String>
和List<Integer>
,则编译器知道列表来自不同类型,这使得它能够基于每个实例创建某种类型的类型安全环境。由于类型擦除,在运行时它就像两个列表都包含对象并且彼此等效。