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.