簡體   English   中英

Java 不能用不同的參數繼承

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM