不能使用不同的参数继承Java

时间:2019-03-12 03:45:32

标签: java

我在继承接口时遇到了麻烦。我一直以错误

结尾
  

错误:无法使用不同的参数继承NameableContainer:和<>

我有以下界面:

public interface Nameable

public interface Name

public interface Friend extends Nameable

public interface NameableContainer<T extends Nameable> {
    void add(Name name, Name prevName);

    void remove(Nameable nameable);

    T findByName(Name name);
}

public interface FriendContainer extends NameableContainer<Friend>

我还有一个继承了NameableContainer的抽象类。

public abstract class NameableMap implements NameableContainer {
    public void add(Name name, Name prevName) { /* do stuff*/ }

    public void remove(Nameable nameable) { /* do stuff*/ }

    public Nameable findByName(Name name) { /* do stuff*/ }
}

最后,尝试将所有这些放在一起

public class Friends extends NameableMap implements FriendContainer

我想念什么?

2 个答案:

答案 0 :(得分:2)

您说的是原始类型

public abstract class NameableMap implements NameableContainer

这会使编译器中的所有内容丢掉;除非您的代码最初是为Java 1.4或更早版本编写的,否则原始类型是一个错误。在实现指定类型参数的接口时,您需要提供具体的类型,或者如果尚不知道具体类型,则可以引入另一个类型参数并将其传递给超类型。

请参阅: What is a raw type and why shouldn't we use it?

因此,您在实现NameableContainer时要指定一个变量泛型类型参数(因为您尚不知道具体类型,因为NameableMap也应适用于所有可命名对象。

public abstract class NameableMap<T extends Nameable> implements NameableContainer<T>
//                               ^^^^^^^^^^^^^^^^^^^^                             ^^^

答案 1 :(得分:-1)

将整个程序中的所有代码移到一个类中,然后放在一行上