为了更好地理解我的问题,请参阅以下课程:
public interface Invoker<R> {
public String getName();
public R getResult();
}
实现:
public class RepairFetcher implements Invoker<List<String>> {
@Override
public String getName() {
return this.getClass().getSimpleName();
}
@Override
public List<String> getResult() {
return new ArrayList<String>();
}
}
出错的班级:
public class OperationService {
public <R> R invoke(Class<R> invoker, Object... parameters) {
WebserviceOperation<R> operation = new WebserviceOperation<R>(invoker);
Invoker<R> instance = operation.getInstance();
return instance.getResult();
}
}
主要班级:
public class Main {
public static void main(String[] args) {
OperationService operationService = new OperationService();
operationService.invoke(RepairFetcher.class, new Object[] {});
}
}
问题: 此时方法
operationService.invoke(RepairFetcher.class,new Object [] {});
返回一个RepairFetcher,由于invoke方法中的参数,它不是那么奇怪:
类调用者
返回R,这是一个RepairFetcher.class。
我想要什么 我不希望invoke方法返回RepairFetcher类,但我希望它返回声明的Type,即List&lt;串GT;
这可能,如果可行,如何实现?
提前致谢!
答案 0 :(得分:2)
不确定,但请尝试:
public <T, R extends Invoker<T>> T invoke(Class<R> invoker, Object... parameters) {
答案 1 :(得分:1)
您发布的代码不会以当前形状编译(它会遗漏某些部分),但是根据您要执行的操作判断,您应该知道Class
参数化了类型类;因此,String.getClass()
的类型为Class<String>
。
那就是你的功能定义
public <R> R invoke(Class<R> invoker, Object... parameters) {
可能应该是
public <R> R invoke(Class<Invoker<R>> invoker, Object... parameters) {
所以你可以确保返回你的调用者返回的相同类型。
答案 2 :(得分:0)
RepairFetcher实现Invoker<List<String>>
,因此RepairFetcher为Invoker<List<String>>
,返回正常。
如果你测试一下:
RepairFetcher instanceof Invoker<List<String>>
,答案必须为真。
PS:我替换&lt; by(因为编辑器有&lt;
的问题