Java 执行ObjectList=StringList时的ClassCastException

Java 执行ObjectList=StringList时的ClassCastException,java,string,object,arraylist,Java,String,Object,Arraylist,我使用带有一个字符串的方法Arrays.asList()创建了列表。 然后我将其分配到列表,得到ClassCastException。 我做错了什么 代码是: class A { Object value; public <T> T getAValue() { return (T) value; } } A类{ 目标价值; 公共T getAValue(){ 返回(T)值; } } 然后我做了 A a = new A(); a.value

我使用带有一个字符串的方法
Arrays.asList()
创建了列表。 然后我将其分配到
列表
,得到ClassCastException。 我做错了什么

代码是:

class A {
    Object value;

    public <T> T getAValue() {
        return (T) value;
    }
}
A类{
目标价值;
公共T getAValue(){
返回(T)值;
}
}
然后我做了

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

List<Object> list = Arrays.asList(a.getAValue());
A A=新A();
a、 value=“abc”;
List=Arrays.asList(a.getAValue());
试试这个:

    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());
        }
    }
导入java.util.array;
导入java.util.List;
甲级{
T值;
公共T getAValue(){
返回值;
}
公共静态void main(字符串…参数){
A=新的A();
a、 value=“abc”;
List=Arrays.asList(a.getAValue());
系统输出打印项次(列表);
System.out.println(a.value.getClass());
}
}
请注意,在声明
class A
T的类型绑定到字符串时,通过声明泛型类型“T”可以简化语法,不需要在getAValue()中强制转换返回值,泛型会为您解决这个问题。

尝试以下操作:

    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());
        }
    }
导入java.util.array;
导入java.util.List;
甲级{
T值;
公共T getAValue(){
返回值;
}
公共静态void main(字符串…参数){
A=新的A();
a、 value=“abc”;
List=Arrays.asList(a.getAValue());
系统输出打印项次(列表);
System.out.println(a.value.getClass());
}
}

请注意,在声明
类A时,通过声明泛型类型“T”可以简化语法,T的类型绑定到字符串,无需在getAValue()中强制转换返回值,泛型会为您解决此问题。

如果您确实无法在
类A
上添加类型信息(即使用
类A
),然后,一个简单的cast解决您的问题,如()所示:

还请注意,您应该为
value
使用setter(即no
a.value=“…”



一些阅读:

如果你真的不能在
A
上添加类型信息(即使用
A类
),那么简单的强制转换就可以解决你的问题,如下所示():

还请注意,您应该为
value
使用setter(即no
a.value=“…”



一些阅读:

你能展示一下你的代码吗?答案是,“一个
列表
并不是一个
列表
”,但是一个更完整的解决方案还包括一种方法来帮助你绕过你所面临的问题。要扩展Makato所说的,不是所有的对象都是字符串,所以你可以得到一个ClassCastException@cricket_007:我认为他们试图做的是
(列表)someListTypeStringInstance
,而不是相反。根本不清楚如何获得
类异常。当将
列表
强制转换为
列表
时,您将永远不会得到
ClassCastException
,因为在运行时没有区别。我们需要看看你的代码!我认为您需要添加
A
T值
而不是
对象值
,然后
public T getAValue()
返回值
,然后实例化
A=new A()
您能显示您的代码吗?答案是,“一个
列表
并不是一个
列表
”,但是一个更完整的解决方案还包括一种方法来帮助你绕过你所面临的问题。要扩展Makato所说的,不是所有的对象都是字符串,所以你可以得到一个ClassCastException@cricket_007:我认为他们试图做的是
(列表)someListTypeStringInstance
,而不是相反。根本不清楚如何获得
类异常。当将
列表
强制转换为
列表
时,您将永远不会得到
ClassCastException
,因为在运行时没有区别。我们需要看看你的代码!我认为您需要添加
A
T值
而不是
对象值
,然后添加
public T getAValue()
返回值
,然后实例化
A=new A()
为什么在main中使用原始类型?还要注意的是,评论a中的OP不能修改。为什么在main中使用raw类型?还请注意,评论a中的OP不能修改。
A<String> a = new A<String>();
a.value = "abc";
List<String> list = Arrays.asList(a.getAValue());