Java 泛型:为什么这个嵌套模板会失败?

Java generics: why does this nested template fail?

我有一个情况可以总结如下:

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> 是一种方法,但是有更好的方法吗?

? 表示不清楚它实际上是什么数据类型。 Unknown 和 unknown 是互不兼容的,因为实际上它可能是 IntegerString:

Hello<?> hello = new HelloImpl<Integer>();
World<?, ?> world = new WorldImpl<String,String>();

编译时类型未知。