在列表中键入Cast对象

时间:2013-11-19 08:53:07

标签: java arraylist casting type-conversion

我有一个列表,我正在尝试添加一些Custom Class类型的成员。

List<MyCustomClass> myList = new ArrayList<MyCustomClass>();
myList.addAll(queryResponse.getRecords());

实际上queryResponse又是一个有2个成员的自定义类;

private Long totalRecords;
private List<T> records;

我的问题是,我想将myList(即queryResponse.getRecords())的个别成员投放到MyCustomClass

执行查询后,它们在运行时的类型为“Object”。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

假设queryResponse.getRecords()返回Object,您可以像这样输入caste

myList.addAll((MyCustomClass)queryResponse.getRecords());

答案 1 :(得分:0)

myList.addAll((List)queryResponse.getRecords());

应该有效,产生类型安全警告。 通过这样做,您可以绕过编译时类型安全保证,因此您可以确保以后不会在某处获得ClassCastException。

答案 2 :(得分:0)

怎么样:

List<MyCustomClass> myList = new ArrayList<MyCustomClass>();
for (Object element : queryResponse.getRecords()) {
    if (element instanceof MyCustomClass) {
        // this will never fail because of the check above
        myList.add((MyCustomClass)element);
    }
    else {
        // do something here in case element has the wrong type
        System.err.println("Found incompatible record!");
    }
}

这使用instanceof运算符来确保强制转换不会失败。当对象类型不兼容时,您所做的事情取决于您的要求。