简体   繁体   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");
    }
}

I am getting errors like我收到类似的错误

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 Main.java:12:错误:TextMessage 不是抽象的,并且不会覆盖消息类中的抽象方法 setContent(T) TextMessage extends Message { ^ 其中 T 是类型变量:T 扩展方法 setContent(T) 中声明的对象 1 错误

Your method declaration:您的方法声明:

abstract <T> void setContent(T content) ;

hides the type parameter declared in class.隐藏类中声明的类型参数。 That causes the error, most probably you don't need that additional type parameter on the method.这会导致错误,很可能您不需要该方法上的附加类型参数。

The method is abstract.方法是抽象的。 Did you mean to use the class parameter instead?您的意思是改用类参数吗?

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

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

Correct implementation is:正确的实现是:

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);
    }
}

As you see type parameter has been specified in TextMessage and IntegerMessage classes如您所见,类型参数已在TextMessageIntegerMessage类中指定

Not useful没用
This may help you, you can code on Intellij Idea which could fix your code.这可能会对您有所帮助,您可以在 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