【问题标题】:Bound mismatch error while dealing with generics and inheritance处理泛型和继承时出现绑定不匹配错误
【发布时间】:2017-07-17 11:25:15
【问题描述】:

我有以下类和接口:

public class Entity {}
public interface EntitySet<T extends Entity> {}

现在我想编写实现EntitySet 接口并重用类型T 的类。我尝试了以下操作:

public class Method1EntitySet<T> implements EntitySet<T extends Entity>{}

这给了我错误:

令牌“扩展”的语法错误,预期

所以我尝试了:

public class Method1EntitySet<T> implements EntitySet<T>{}

这给了我错误:

边界不匹配:类型 T 不是 EntitySet 类型的有界参数的有效替代品

这行得通:

public class Method1EntitySet<T> implements EntitySet{} 

但它给了我警告:

EntitySet 是一个原始类型。对泛型 EntitySet 的引用应该被参数化。

我也猜想,上面的T 不会强制扩展Entity

我应该如何完成这项工作?

【问题讨论】:

    标签: java generics inheritance


    【解决方案1】:

    类型绑定应该是泛型类型参数T被声明的地方:

    public class Method1EntitySet<T extends Entity> implements EntitySet<T>{}
    

    【讨论】:

    • 如果我想指定T 的类型而不仅仅是T extends Entity 怎么办?
    • public class Method1EntitySet implements EntitySet&lt;ThatSpecificType&gt;{}。如果您指定它,则不再需要类型变量。
    • @anir 在这种情况下,您将无法在 implements EntitySet&lt;T&gt; 子句中使用 T。
    • 没有得到你。你的意思是@AndyTurner 是错的。看来他说的有效果。
    • @anir 也许我没有得到你的评论。如果您根本不想使用 T,您可以按照 Andy 的建议进行操作。
    猜你喜欢
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    相关资源
    最近更新 更多