我做ObjectList = StringList时出现ClassCastException

时间:2016-03-16 17:17:01

标签: java string object arraylist

我使用方法Arrays.asList()创建了一个字符串列表。 然后我将它分配给List<Object>,我得到了ClassCastException。 我做错了什么?

代码是:

class A {
    Object value;

    public <T> T getAValue() {
        return (T) value;
    }
}

然后我做

A a = new A();
a.value = "abc";

List<Object> list = Arrays.asList(a.getAValue());

2 个答案:

答案 0 :(得分:1)

试试这个:

    import java.util.Arrays;
    import java.util.List;

    class A<T>{
        T value;

        public T getAValue(){
            return value;
        }

        public static void main(String... args){
            A a = new A();
            a.value = "abc";

            List<Object> list = Arrays.asList(a.getAValue());
            System.out.println(list);
            System.out.println(a.value.getClass());
        }
    }

通过声明泛型类型&#39; T&#39;来注意简化语法。当声明class A<T> T&#39的类型绑定到String并且没有必要在getAValue()中转换返回值时,泛型会为您处理。

答案 1 :(得分:1)

如果您真的无法在A上添加类型信息(即使用class A<T>),那么简单的广告就会解决您的问题,例如demo) :

A a = new A();
a.value = "abc";
List<Object> list = Arrays.asList((Object) a.getAValue());

这是安全的,因为所有内容都是Object,但干净的方法是使用A上的类型信息,,如另一个答案所述({{3} }):

A<String> a = new A<String>();
a.value = "abc";
List<String> list = Arrays.asList(a.getAValue());

另请注意,您应使用value的设定者(即无a.value = "...")。

一些阅读:demo