[英]ISomeBaseInterface cannot be inherited with different arguments: <java.lang.Object> and <>
[英]Java cannot be inherited with different arguments
我在實際繼承接口時遇到了麻煩。 我一直以錯誤告終
錯誤:NameableContainer 不能用不同的參數繼承:<Friend> 和 <>
我有以下接口:
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
我錯過了什么?
當您說時,您正在使用原始類型
public abstract class NameableMap implements NameableContainer
這會在編譯器中拋出所有內容; 原始類型是錯誤的,除非您的代碼最初是為 java 1.4 或更早版本編寫的。 當你實現一個指定類型參數的接口時,你要么需要提供一個具體的類型,或者如果還不知道,你可以引入另一個類型參數並將它傳遞給超類型。
請參閱: 什么是原始類型,為什么我們不應該使用它?
因此,您在實現NameableContainer
時指定了一個可變的泛型類型參數(因為您還不知道具體類型,因為NameableMap
也應該適用於所有 Nameables。
public abstract class NameableMap<T extends Nameable> implements NameableContainer<T>
// ^^^^^^^^^^^^^^^^^^^^ ^^^
將整個程序中的所有代碼移到一個類中並將其放在一行中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.