Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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 将泛型类类型强制转换为非泛型或调用其实例的方法?_Java_Generics - Fatal编程技术网

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();
  }
}