从main获得不同的输出

时间:2013-05-29 21:52:04

标签: java

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

2 个答案:

答案 0 :(得分:2)

System.outSystem.err适用于不同的主题。两个线程在不同时间访问共享资源(控制台)。

另请参阅Random printing order for System.out & System.err callsJava: System.out.println and System.err.println out of order

答案 1 :(得分:0)

在内部测试中,您的列表不是Generic - 因此您可以向其添加任何Object。

问题在于它之外你正在使用限制为字符串的List。

这种冲突导致了你的问题。