通过传递带有泛型的类来返回类型化类的正确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 replacepublic <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) {