Java 将泛型类类型强制转换为非泛型或调用其实例的方法?
我正在尝试执行以下操作之一:Java 将泛型类类型强制转换为非泛型或调用其实例的方法?,java,generics,Java,Generics,我正在尝试执行以下操作之一: Dummy d = (Class<Dummy>)super.getEntity(); // incompatible Types - cannot cast Dummy d = (Dummy)super.getEntity(); // incompatible Types - cannot cast d.foo(); Dummy d=(类)super.getEntity();//不兼容的类型-无法强制转换 虚拟d=(虚拟)super.getEnti
Dummy d = (Class<Dummy>)super.getEntity(); // incompatible Types - cannot cast
Dummy d = (Dummy)super.getEntity(); // incompatible Types - cannot cast
d.foo();
Dummy d=(类)super.getEntity();//不兼容的类型-无法强制转换
虚拟d=(虚拟)super.getEntity();//不兼容的类型-无法强制转换
d、 foo();
或
Class d=(Class)super.getEntity();//作品
d、 foo();//找不到方法
虚拟d在抽象超类中定义如下:
Class<T> dummy;
public Class<T> getEntity() { return dummy; }
类虚拟;
公共类getEntity(){return dummy;}
有没有办法在泛型类类型的对象中调用方法(foo)?关键是,超类不应该关心对象的类型,因此功能可以随扩展类的不同而变化。您的getEntity()
方法返回一个类标记,而不是该类的实例,因此您不能对其调用foo()
,只能调用的接口中定义的方法。您需要首先实例化该类(通过调用-它要求该类具有公共默认构造函数),然后拥有一个类对象,您可以在该对象上调用foo()
:
超类上的“getEntity()”方法是否应该返回类型或类的对象?似乎您的成员应该定义为“T dummy”而不是“Class dummy”,并且getEntity()应该返回T的实例。dummy在构造函数中实例化,公共抽象ABC{dummy在构造函数中实例化,公共抽象ABC{public ABC(Class dummy){this.dummy=dummy;}…}如果dummy不是一个实例,我如何获得对其实例的引用?
Class<T> dummy;
public Class<T> getEntity() { return dummy; }
Class<Dummy> clazz = super.getEntity();
try {
Dummy d = clazz.newInstance();
d.foo();
} catch (...) {
}
public abstract class ABC<T> {
private T dummy;
public ABC(T dummy) { this.dummy = dummy; }
...
public T getEntity() { return dummy; }
}
public class DEF extends ABC<Dummy> {
public DEF() {
super(new Dummy(); }
}
public void doSomething() {
Dummy dummy = getEntity();
dummy.foo();
}
}