我在继承接口时遇到了麻烦。我一直以错误
结尾错误:无法使用不同的参数继承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
我想念什么?
答案 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)
将整个程序中的所有代码移到一个类中,然后放在一行上