无法覆盖 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: error: TextMessage is not abstract and does not override abstract method setContent(T) in Message class TextMessage extends Message { ^ where T is a type-variable: T extends Object declared in method setContent(T) 1 error

方法是抽象的。您是想改用 class 参数吗?

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

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

您的方法声明:

abstract <T> void setContent(T content) ;

隐藏在class中声明的类型参数。这会导致错误,很可能您不需要该方法的附加类型参数。

没用
这可能对您有所帮助,您可以在 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");
    }
}

正确的实现是:

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

中指定