Java ClassCastException使用时?延伸

时间:2018-10-05 09:47:30

标签: java classcastexception

我有一个获取这种类型参数的方法:

NSArray<? extends FIRQueryDocumentSnapshot>

现在,当我使用此数组的元素时,会得到一个 ClassCastException 。我的方法:

public static List<AbstractWrapper> getWrapperList(Class<? extends IAbstractWrapper> wrapper, NSArray<? extends FIRQueryDocumentSnapshot> documentSnapshotArray){
        List<AbstractWrapper> results = new ArrayList();
        for(int i=0; i<documentSnapshotArray.size(); i++){
            FIRQueryDocumentSnapshot doc = documentSnapshotArray.get(i);
            results.add(getWrapper(wrapper,doc));
        }
        return results;
    }

第4行出现错误

  

java.lang.ClassCastException:apple.NSObject无法转换为   org.moe.binding.firebasefirestore.FIRQueryDocumentSnapshot

1 个答案:

答案 0 :(得分:1)

可能会发生,因为您从documentSnapshotArray.get(i)获得的对象无法转换为FIRQueryDocumentSnapshot,请通过以下方式进行验证

System.out.println(documentSnapshotArray.get(i) instanceof FIRQueryDocumentSnapshot);  
// if true problem is something else but, 
// if false then object you are getting is not a type of FIRQueryDocumentSnapshot  

解决此问题的方法是:-

  • 如果您得到的对象不是 FIRQueryDocumentSnapshot,那么您应该在以下位置修复代码 documentSnapshotArray已生成,并确保您放置的每个元素 documentSnapshotArray中的类型应为(IS-A) FIRQueryDocumentSnapshot。