如何从泛型中获取类类型?

时间:2015-06-29 07:29:09

标签: java generics

我有一个类类型T的列表,以及为类类型调用的以下方法:

<T extends PersistentEntity> void subscribe(Class<T> clazz, HBaseStreamFactory factory) {
    final DisposablePublisher<Tuple.Tuple2<T,T>> publisher 
        = new DisposablePublisher<>(factory.createPublisher(?));
}

方法createPublisher()应该接收类型Tuple.Tuple2&lt; T,T&GT;而不是?,我怎么能从了解clazz中获得它?

1 个答案:

答案 0 :(得分:0)

您可以使用Tuple.Tuple2.class,它是在运行时表示Tuple.Tuple2类的类对象。 (无论如何,运行时都没有泛型。每个类只有一个类对象。)此表达式的类型为Class<Tuple.Tuple2>。如果你真的想要类型Class<Tuple.Tuple<T,T>>的东西来满足编译器,你可以做一些不安全的转换:

factory.createPublisher((Class<Tuple.Tuple<T,T>>)(Class<?>)Tuple.Tuple2.class)

(或者您可以相应地转换createPublisher()的结果;我没有方法签名,所以我无法预测将如何编写)