Java泛型:为什么此嵌套模板失败?

时间:2019-05-10 17:31:59

标签: java nested-generics

我的情况可以总结如下:

interface Hello<T> {
};

interface World<T, U> {
    void apply(Hello<T> t, Hello<U> u);
}

现在让我们说我想打World.apply而不关心嵌套类型,所以我尝试了以下操作:

Hello<?> hello = ...;
World<?, ?> world = ...;
world.apply(hello, hello);

但是我得到了这个晦涩的信息:

java: incompatible types: Hello<capture#1 of ?> cannot be converted to Hello<capture#2 of ?>

这是怎么了?除了诉诸原始类型,还有其他方法可以实现吗?

world投射到World<Object, Object>是一种方法,但是还有什么更好的方法吗?

1 个答案:

答案 0 :(得分:3)

Integer表示尚不清楚它实际上是什么数据类型。未知和未知是彼此不兼容的,因为实际上它可能是例如StringHello<?> hello = new HelloImpl<Integer>(); World<?, ?> world = new WorldImpl<String,String>();

Date.now()

类型在编译时未知。