簡體   English   中英

無法覆蓋java中的泛型方法

[英]Unable to override generic method in java

abstract class Message <T> {
    abstract <T> void setContent(T content) ;
}
class TextMessage extends Message<String> {
     void setContent(String content) {
     }
}
public class Main
{
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

我收到類似的錯誤

Main.java:12:錯誤:TextMessage 不是抽象的,並且不會覆蓋消息類中的抽象方法 setContent(T) TextMessage extends Message { ^ 其中 T 是類型變量:T 擴展方法 setContent(T) 中聲明的對象 1 錯誤

您的方法聲明:

abstract <T> void setContent(T content) ;

隱藏類中聲明的類型參數。 這會導致錯誤,很可能您不需要該方法上的附加類型參數。

方法是抽象的。 您的意思是改用類參數嗎?

abstract class Message <T> {
    abstract void setContent(T content) ;
}

class TextMessage extends Message<String> {
     void setContent(String content) {
     }
}

正確的實現是:

abstract class Message <T> {
    abstract void setContent(T content) ;
}

class TextMessage extends Message<String> {
    @Override
    void setContent(String content) {
        System.out.println(content);
    }
}

class IntegerMessage extends Message<Integer> {
    @Override
    void setContent(Integer content) {
        System.out.println(content);
    }
}

如您所見,類型參數已在TextMessageIntegerMessage類中指定

沒用
這可能會對您有所幫助,您可以在 Intellij Idea 上進行編碼,它可以修復您的代碼。

abstract class Message <T> {
    abstract <T> void setContent(T content) ;
}
class TextMessage extends Message<String> {

    <String> void setContent(String content) {
    }
}
public class Main
{
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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