通过传递带有泛型的类来返回类型化类的正确Java类型

通过传递带有泛型的类来返回类型化类的正确Java类型,java,generics,Java,Generics,要更好地理解我的问题,请参阅以下课程: public interface Invoker<R> { public String getName(); public R getResult(); } 问题: 此时此刻,方法 调用(RepairFetcher.class,新对象[]{}) 返回一个RepairFetcher,由于invoke方法中的参数,它并不奇怪: 类调用程序 返回R,它是一个RepairFetcher.class 我想要什么 我不希望invoke方法返回Re

要更好地理解我的问题,请参阅以下课程:

public interface Invoker<R> {
  public String getName();
  public R getResult();
}
问题: 此时此刻,方法

调用(RepairFetcher.class,新对象[]{})

返回一个RepairFetcher,由于invoke方法中的参数,它并不奇怪:

类调用程序

返回R,它是一个RepairFetcher.class

我想要什么 我不希望invoke方法返回RepairFetcher类,但希望它返回声明的类型,即List

这是否可能,如果可能,如何实施


提前谢谢

RepairFetcher实现
调用程序
,因此RepairFetcher是
调用程序
,返回良好

如果您对此进行测试:

RepairFetcher instanceof
调用程序
,答案必须为true

PS:I replace
public <T, R extends Invoker<T>> T invoke(Class<R> invoker, Object... parameters) {
publictinvoke(类调用程序、对象…参数){

您发布的代码没有以当前的形式编译(它遗漏了一些部分),但是从您试图做的事情来看,您应该知道
Class
是用类的类型参数化的;因此,
String.getClass()
的类型是
Class

也就是说,你的函数定义

public <R> R invoke(Class<R> invoker, Object... parameters) {
public R调用(类调用程序、对象…参数){
应该是这样的

public <R> R invoke(Class<Invoker<R>> invoker, Object... parameters) {
public R调用(类调用程序、对象…参数){
因此,您可以确保返回与调用程序返回的类型相同的类型

public <T, R extends Invoker<T>> T invoke(Class<R> invoker, Object... parameters) {
public <R> R invoke(Class<R> invoker, Object... parameters) {
public <R> R invoke(Class<Invoker<R>> invoker, Object... parameters) {