Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从“通用”列表创建自定义对象列表;“对象”;获取ClassCastException_Java_List_Object - Fatal编程技术网

Java 从“通用”列表创建自定义对象列表;“对象”;获取ClassCastException

Java 从“通用”列表创建自定义对象列表;“对象”;获取ClassCastException,java,list,object,Java,List,Object,我有这样的代码: public void success(List<Object> profiles, Response response) { List<MyCustomObject> list= new ArrayList<MyCustomObject>(); for (Object profile : profiles) { list.add((MyCustomObject) profile); // t

我有这样的代码:

public void success(List<Object> profiles, Response response) {

    List<MyCustomObject> list= new ArrayList<MyCustomObject>();

    for (Object profile : profiles) {
            list.add((MyCustomObject) profile);    // this line crashes                        
     }

  }
public void成功(列表配置文件、响应){
列表=新的ArrayList();
用于(对象配置文件:配置文件){
list.add((MyCustomObject)profile);//此行崩溃
}
}
所以我在上面提到的第行得到了一个
ClassCastException
。我能做这个吗

下面是我要做的,我真正的代码有点复杂:

我有一个
列表
,其中包含两种类型的对象。因此,我使用
对象
来保存这两个对象。然后,一旦我从服务器收到这个列表,我想将列表分成两个自定义对象列表(例如,
list
,而不是
list
。因此我在我的
For
循环中进行上述转换,以便将传入的通用对象存储到其特定类型的对象列表中


还有其他方法吗?我走对了吗?

你应该在演员阵容之前添加一个安全检查,以防止代码崩溃

    List<MyCustomObject> list= new ArrayList<MyCustomObject>();

    int index = 0;
    for (Object profile : profiles) {

        // Safety check before casting the object
        if (profile instanceof MyCustomObject) {
            list.add((MyCustomObject) profile);    // wont crash now
        } else {
            // other type of object. Handle it separately
        }                   
     }
List List=new ArrayList();
int指数=0;
用于(对象配置文件:配置文件){
//铸造物体前的安全检查
if(MyCustomObject的配置文件实例){
list.add((MyCustomObject)profile);//现在不会崩溃
}否则{
//其他类型的对象。单独处理它
}                   
}

使用“instanceof”运算符来确定哪个对象类型和路由到正确的列表。也许这会使设计的有效性得到验证?如果我理解正确,不如声明两种列表类型,而不是强制转换,使用一些条件,然后填充适当的列表?@SandepChatterjee这正是我试图做的,并且正在做的。但是我的执行是有缺陷的。但是除了强制转换之外,我还需要
instanceof
。假设这两种类型是相关的,创建一个
profile
接口,这两种类型都可以实现。在接口中添加一个
enum
类型来区分这两种类型。另外,我建议不要使用“generic”一词一般来说,它在Java中有一个特殊的含义。调用普通对象
对象
就足够了,而且不含糊。虽然代码解决了您眼前的问题,但如果您传递
对象
,并使用
instanceof
接口
将其装箱,那么您的设计问题似乎更大e> 抽象类
是你的朋友:)我同意@Paul的观点。你应该考虑一下你的设计。好吧,好吧,我会把这个标记为正确的,因为它确实与我关于撞车的问题直接相关,它解决了这个问题。但我不认为我能使用它,因为我的设计问题。我对Java的了解还不够,无法像@Paul所说的那样实现它,所以我必须做一些更基本、更孤立的事情。可能需要两个
async
网络调用来获取两个单独的列表,而不是一个网络调用和一个混合
对象
类型的列表。如果您有时间,请看一看:花一点时间学习Java的一些核心概念将在将来为您节省大量时间和麻烦。祝你好运