Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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 获取的类类型为“?”&引用;在ArrayList中<;?扩展类>;_Java_Arraylist - Fatal编程技术网

Java 获取的类类型为“?”&引用;在ArrayList中<;?扩展类>;

Java 获取的类类型为“?”&引用;在ArrayList中<;?扩展类>;,java,arraylist,Java,Arraylist,我知道有很多类似的问题,但我真的没有找到一个有效的答案 我有一个抽象类实体。 然后我有这两个类,Biker和pedden,它们都扩展了Entity 我需要对两个类的两个ArrayList执行操作, 要做到这一点,我有一个方法 private void handleEntities(ArrayList<? extends Entity> entities) {...}; 如果列表为空,这几乎是不可能的 仔细阅读擦除的详细信息。如果列表为空,这实际上是不可能的 有关擦除的详细信息,请阅

我知道有很多类似的问题,但我真的没有找到一个有效的答案

我有一个抽象类
实体
。 然后我有这两个类,
Biker
pedden
,它们都扩展了
Entity

我需要对两个类的两个
ArrayList
执行操作, 要做到这一点,我有一个方法

private void handleEntities(ArrayList<? extends Entity> entities) {...};

如果列表为空,这几乎是不可能的


仔细阅读擦除的详细信息。

如果列表为空,这实际上是不可能的


有关擦除的详细信息,请阅读。

对于使用泛型定义的类,例如:

class <T> myClass
class-myClass
在构造函数中,您可以定义一个类类型引用,然后在保存ArrayList时,可以将其与instanceOf、.getClass()等一起使用

try {
    classType = (Class<T>)
                ((ParameterizedType) getClass().getGenericSuperclass())
                        .getActualTypeArguments()[0];
} catch (ClassCastException cce) {
        classType = (Class<T>) getClass().getGenericSuperclass();
}
试试看{
classType=(类)
((ParameterizedType)getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
}捕获(ClassCastException cce){
classType=(类)getClass().getGenericSuperclass();
}

一种更简单的方法是让基类定义一个类getClassRef(),该类返回Biker.Class或peander.Class作为结果

对于使用泛型定义的类,例如:

class <T> myClass
class-myClass
在构造函数中,您可以定义一个类类型引用,然后在保存ArrayList时,可以将其与instanceOf、.getClass()等一起使用

try {
    classType = (Class<T>)
                ((ParameterizedType) getClass().getGenericSuperclass())
                        .getActualTypeArguments()[0];
} catch (ClassCastException cce) {
        classType = (Class<T>) getClass().getGenericSuperclass();
}
试试看{
classType=(类)
((ParameterizedType)getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
}捕获(ClassCastException cce){
classType=(类)getClass().getGenericSuperclass();
}

一种更简单的方法是让基类定义一个类getClassRef(),该类返回Biker.Class或peander.Class作为结果

请展示你为什么需要这个的完整用例。还有@4castle谢谢,这个链接帮助了我。你为什么不为
实体的每个子类重载
HandleEntity
?这会使你的代码更具可扩展性。好吧,但考虑到你想做什么是不可能的,你没有选择的余地。另外,它在未来实际上很容易扩展。将所有样板文件放在另一个处理任何
列表的方法中,然后将特定的子类实现放在重载中。请展示为什么需要它的完整用例。还有@4castle谢谢,这个链接帮了我的忙。你为什么不为
实体的每个子类重载
handleEntities
?这会使你的代码更具可扩展性。好吧,但考虑到你想做什么是不可能的,你没有选择的余地。另外,它在未来实际上很容易扩展。将所有样板放在另一个方法中,该方法处理任何
列表
,然后将特定的子类实现放在重载中。很好的方法,尽管我正在寻找更简单的方法,因为它是一个非常“软”的情况。顺便说一句,谢谢。除非你有一个具体的子类,否则这是行不通的。很好的方法,尽管我一直在寻找更简单的方法,因为它是一个非常“软”的案例。顺便说一句,谢谢。除非你有一个具体的子类,否则这是行不通的。