Java - 如何传入类型<a <b>&gt;方法

时间:2016-09-04 13:09:53

标签: java generics java-7

我有一种方法,比如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

获取

1 个答案:

答案 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)保持不变,只有类型参数发生变化。