这可能只是没有看到树木的森林,但我有这样的一个类:
class MyClass<T extends Identifiable<?, String> & Displayable> {
// stuff
}另一个像这样的:
class Value<I> implements Displayable, Identifiable<I, String> {
// other stuff
}我假设MyClass<Value>会编译,因为Value的所有实例都实现了Displayable和Identifiable<?, String>,但它没有:
界不匹配:类型值不能有效地替代有界参数和MyClass类型的Displayable>
即使我不使用implements部件中的类型,我也会得到相同的错误:
class Value<I> implements Displayable, Identifiable<Long, String> {
// other stuff
}当我像这样更改Value类时,一切都正常:
class Value implements Displayable, Identifiable<Long, String> {
// other stuff
}但我的问题是:为什么替代类型的Value类不起作用?
发布于 2016-08-16 11:27:41
我以为MyClass会编译
不,但是MyClass<Value<?>>会编译。
Value<I>是一个泛型类型。当省略类型变量<I>时,使用原始类型。使用原始类型时,类型变量I of Value不存在,编译器无法检查Value implements Identifiable<I, String>是否是T extends Identifiable<?, String>的有效替代。因此编译器错误。
发布于 2016-08-16 11:32:34
我认为这可能是代码中的另一个问题。我试过你说的话不起作用,也没有错误:
class Value<I> implements Displayable, Identifiable<I, String> {
// other stuff
}也许您在声明class时忘记了Value关键字
https://stackoverflow.com/questions/38972871
复制相似问题