简体   繁体   中英

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

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

Not useful
This may help you, you can code on Intellij Idea which could fix your code.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM