首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型类型的绑定不匹配

泛型类型的绑定不匹配
EN

Stack Overflow用户
提问于 2016-08-16 10:46:40
回答 2查看 58关注 0票数 1

这可能只是没有看到树木的森林,但我有这样的一个类:

代码语言:javascript
复制
class MyClass<T extends Identifiable<?, String> & Displayable> {
    // stuff
}

另一个像这样的:

代码语言:javascript
复制
 class Value<I> implements Displayable, Identifiable<I, String> {
    // other stuff
 }

我假设MyClass<Value>会编译,因为Value的所有实例都实现了DisplayableIdentifiable<?, String>,但它没有:

界不匹配:类型值不能有效地替代有界参数和MyClass类型的Displayable>

即使我不使用implements部件中的类型,我也会得到相同的错误:

代码语言:javascript
复制
 class Value<I> implements Displayable, Identifiable<Long, String> {
    // other stuff
 }

当我像这样更改Value类时,一切都正常:

代码语言:javascript
复制
 class Value implements Displayable, Identifiable<Long, String> {
    // other stuff
 }

但我的问题是:为什么替代类型的Value类不起作用?

EN

回答 2

Stack Overflow用户

发布于 2016-08-16 11:27:41

我以为MyClass会编译

不,但是MyClass<Value<?>>会编译。

Value<I>是一个泛型类型。当省略类型变量<I>时,使用原始类型。使用原始类型时,类型变量I of Value不存在,编译器无法检查Value implements Identifiable<I, String>是否是T extends Identifiable<?, String>的有效替代。因此编译器错误。

票数 1
EN

Stack Overflow用户

发布于 2016-08-16 11:32:34

我认为这可能是代码中的另一个问题。我试过你说的话不起作用,也没有错误:

代码语言:javascript
复制
class Value<I> implements Displayable, Identifiable<I, String> {
    // other stuff
}

也许您在声明class时忘记了Value关键字

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38972871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档