我在實際繼承接口時遇到了麻煩。我一直以錯誤結(jié)束錯誤:NameableContainer 不能用不同的參數(shù)繼承:<Friend> 和 <>我有以下接口:public interface Nameablepublic interface Namepublic interface Friend extends Nameablepublic 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 回答

狐的傳說
TA貢獻1804條經(jīng)驗 獲得超3個贊
當(dāng)您說時,您正在使用原始類型
public abstract class NameableMap implements NameableContainer
這會在編譯器中拋出所有東西;除非您的代碼最初是為 java 1.4 或更早版本編寫的,否則原始類型是錯誤的。當(dāng)你實現(xiàn)一個指定類型參數(shù)的接口時,你要么需要提供一個具體類型,要么如果還不知道,你可以引入另一個類型參數(shù)并將它傳遞給超類型。
請參閱:什么是原始類型,為什么我們不應(yīng)該使用它?
因此,您在實現(xiàn)時指定了一個可變的泛型類型參數(shù)NameableContainer(因為您還不知道具體類型,因為它NameableMap也應(yīng)該適用于所有 Nameables。
public abstract class NameableMap<T extends Nameable> implements NameableContainer<T>
// ^^^^^^^^^^^^^^^^^^^^ ^^^
添加回答
舉報
0/150
提交
取消