package com.test.scjp;
import java.util.List;
import java.util.ArrayList;
public class TestGeneric {
public static void main(String args[]){
try{
List<String> l = new ArrayList<String>();
TestGeneric t = new TestGeneric();
//t.test(l);
System.out.println("Test");
l=t.test(l);
System.out.println("Test2");
System.out.println(l.get(0));
}
catch(Exception e){
e.printStackTrace();
}
}
public List<String> test(List l){
System.out.println("Test0");
l.add(new Integer(1));
System.out.println("Test1");
return l;
}
}
当我运行此代码20次时,我得到不同的输出:
输出1:
Test
Test0
Test1
Test2
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at com.test.scjp.TestGeneric.main(TestGeneric.java:16)
输出2:
Test
Test0
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at com.test.scjp.TestGeneric.main(TestGeneric.java:16)
Test1
Test2
答案 0 :(得分:2)
System.out
和System.err
适用于不同的主题。两个线程在不同时间访问共享资源(控制台)。
另请参阅Random printing order for System.out & System.err calls和Java: System.out.println and System.err.println out of order
答案 1 :(得分:0)
在内部测试中,您的列表不是Generic - 因此您可以向其添加任何Object。
问题在于它之外你正在使用限制为字符串的List。
这种冲突导致了你的问题。