我有一种方法,比如getHystrixClass(Class<A<B>> clazz)
。它需要传入Class<A<B>>
的输入类型。如何做到这一点?我已经尝试了一些方法,但是所有这些方法在编译时都失败了,如下所示,它们带有相应的错误消息。
加入课程A
getHystrixClass(A.class)
错误消息:类型getHystrixClass(Class<A<B>>)
中的方法IHystrixProvider<A<B>>
不适用于参数(Class<A>)
加入课程B
getHystrixClass(B.class)
错误消息:类型getHystrixClass(Class<A<B>>)
中的方法IHystrixProvider<A<B>>
不适用于参数(Class<B>)
加入课程A<B>
getHystrixClass(A<B>.class)
错误消息:A
无法解析为变量
创建一个虚拟对象并从中获取类。
A<B> dummy = new A<B>();
getHystrixClass(dummy.getClass())
错误消息:类型getHystrixClass(Class<A<B>>)
中的方法IHystrixProvider<A<B>>
不适用于参数(Class<capture#1-of ? extends A>)
任何提示?抱歉我的英语不好。
编辑:
嗨,@ GhostCat
界面如下所示
// Define by my team lead
public interface IHystrixProvider<T extends HystrixCommand, Rq> {
T getHystrixClass(Class<T> hystrixCommand);
}
/**
* @param <R> the return type
*/
public abstract class HystrixCommand<R> extends ... {
...
}
HystrixCommand.java代码是公共存储库,可以从GitHub
获取答案 0 :(得分:0)
您可以使用(未经检查)强制转换来传递Class<A<B>>
- 这是必要的,因为没有Class
对象代表泛型类型A<B>
,只有一个对应于原始类型{{ 1}}。
A
这将按以下顺序执行强制转换:
getHystrixClass((Class<A<B>>) (Class) A.class)
请注意,您首先需要转换为原始Class<A> (type of A.class) -> Class -> Class<A<B>>
以避免Class
警告。两个强制转换也没有运行时开销,因为原始类型(incompatible cast
)保持不变,只有类型参数发生变化。