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 是互不兼容的,因为实际上它可能是 Integer
和 String
:
Hello<?> hello = new HelloImpl<Integer>();
World<?, ?> world = new WorldImpl<String,String>();
编译时类型未知。
我有一个情况可以总结如下:
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 是互不兼容的,因为实际上它可能是 Integer
和 String
:
Hello<?> hello = new HelloImpl<Integer>();
World<?, ?> world = new WorldImpl<String,String>();
编译时类型未知。