1.请问,上面代码最终结果输出的是什么?
Class c1 = new ArrayList<String>().getClass();
Class c2 = new ArrayList<Integer>().getClass();
System.out.println(c1.getName());
System.out.println(c2.getName());
System.out.println(c1 == c2);
System.out.println(c1.equals(c2));
请思考后点击查看正确答案及题解
首先公布正确答案:
java.util.ArrayList
java.util.ArrayList
true
true
上面的代码中涉及到了泛型,而输出的结果缘由是类型擦除。
2.请问,一个Integer的ArrayList可以添加一个String类型吗,如何操作?
请思考后点击查看正确答案及题解
首先公布正确答案:可以
同样是利用Java类型擦除的原理,用反射的手段就绕过了正常开发中编译器不允许的操作限制。
3.代码参考
public class Test02 {
public static void main(String[] args) {
Class c1 = new ArrayList<String>().getClass();
Class c2 = new ArrayList<Integer>().getClass();
System.out.println(c1.getName());
System.out.println(c2.getName());
System.out.println(c1 == c2);
System.out.println(c1.equals(c2));
System.out.println("--------------------------------");
// ArrayList添加一个其他类型
ArrayList<Integer> s = new ArrayList<>();
s.add(1);
try {
Method method = s.getClass().getDeclaredMethod("add", Object.class);
method.invoke(s, 2);
method.invoke(s, "a");
method.invoke(s, false);
} catch (Exception e) {
e.printStackTrace();
}
for (Object o : s) {
System.out.println(o);
}
}
}
请点击查看log输出
java.util.ArrayList
java.util.ArrayList
true
true
--------------------------------
1
2
a
false