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
?这会使你的代码更具可扩展性。好吧,但考虑到你想做什么是不可能的,你没有选择的余地。另外,它在未来实际上很容易扩展。将所有样板放在另一个方法中,该方法处理任何列表
,然后将特定的子类实现放在重载中。很好的方法,尽管我正在寻找更简单的方法,因为它是一个非常“软”的情况。顺便说一句,谢谢。除非你有一个具体的子类,否则这是行不通的。很好的方法,尽管我一直在寻找更简单的方法,因为它是一个非常“软”的案例。顺便说一句,谢谢。除非你有一个具体的子类,否则这是行不通的。