Ama*_*man 19 java generics list arraylist
为什么println打印"tom"并且在转换后没有显示任何运行时异常List<Integer>,而它在转换后无法打印值1 List<String>?
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String args[]) {
List list = Arrays.asList(1, "tom");
System.out.println(((List<Integer>) list).get(1));
// "tom"
System.out.println(((List<String>) list).get(0));
// ClassCastException: Integer cannot be cast to String
}
}
Run Code Online (Sandbox Code Playgroud)
Zhe*_*lov 34
第一个调用println是静态调度到PrintStream.println(Object),第二个调用被调度到PrintStream.println(String).因此,对于第二次调用,编译器会将一个隐式强制转换置于运行时String失败ClassCastException.