如何在Java中强制转换通用列表类型?

jrharshath:

好吧,我有一个Customer类(没有基类)。

我需要从LinkedList投射到List。有什么干净的方法可以做到这一点吗?

请注意,我需要将其转换为List。没有其他类型可以做。(我正在使用Slim和FitNesse开发测试夹具)。


编辑:好的,我想我需要在这里给出代码示例。

import java.util.*;
public class CustomerCollection
{
    protected LinkedList<Customer> theList;

    public CustomerCollection()
    {
        theList = new LinkedList<Customer>();
    }

    public void addCustomer(Customer c){ theList.add(c); }
    public List<Object> getList()
    {
        return (List<? extends Object>) theList;
    }
}

因此,按照Yuval A的说法,我终于以这种方式编写了代码。但是我得到这个错误:

CustomerCollection.java:31: incompatible types
found   : java.util.List<capture#824 of ? extends java.lang.Object>
required: java.util.List<java.lang.Object>
        return (List<? extends Object>)theList;
               ^
1 error

那么,进行此转换的正确方法是什么?

尤瓦尔·亚当(Yuval Adam):

您不需要强制转换。LinkedList实现,List因此您无需在此处进行任何转换。

即使您希望向下转换到的Listof,Object也可以使用以下代码中的泛型来实现:

LinkedList<E> ll = someList;
List<? extends Object> l = ll; // perfectly fine, no casting needed

现在,在完成编辑后,我了解了您要执行的操作,并且没有创建新的List像这样的操作是不可能的

LinkedList<E> ll = someList;
List<Object> l = new LinkedList<Object>();
for (E e : ll) {
    l.add((Object) e); // need to cast each object specifically
}

并且我将解释为什么否则无法做到这一点。考虑一下:

LinkedList<String> ll = new LinkedList<String>();
List<Object> l = ll; // ERROR, but suppose this was possible
l.add((Object) new Integer(5)); // now what? How is an int a String???

有关更多信息,请参见Sun Java泛型教程希望这可以澄清。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Java中强制转换为导致ArrayStoreException的通用类型

Java中的通用类型转换与参数化类型转换

如何在Java中克隆通用列表?

如何在Java中对通用类型设置约束?

在Java 1.5中将非通用列表类型转换为通用列表类型

如何在Java中实例化通用数组类型?

Java:如何将类类型参数强制为与通用方法中指定的通用类型相同?

如何在nashorn中强制转换Java类?

如何在没有未经检查的强制转换警告的情况下从通配符转换为通用返回类型

如何在Go中强制转换为类型别名?

在Java返回类型中强制多个通用范围

在Java属性声明中强制使用通用类型

如何在Swift中向下转换/强制转换结构的泛型类型

如何在C#中创建未知/通用类型的列表?

如何在Delphi中将通用类型转换为实际类型

如何在Java中强制转换继承的对象

如何强制将通用类型包含在特定类中?

如何在Java中强制转换继承的对象

如何在Kotlin中对列表进行分区和类型转换

如何在函数调用中强制转换类型?

强制转换列表类型,以便一个函数可以接受更通用的列表类型

F#:强制转换为通用类型

如何在Java中通过反射强制转换通用基本类型?

如何在Java中将通用列表转换为通用数组?

如何在ada中打印通用类型?

如何在TypeScript中按通用类型过滤类型列表?

如何在 Java 中向下转换列表?

Java:(缺乏)通用类型转换中的错误

如何在目标 c 中强制强制转换和转换数据类型