[英]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);
}
}
如您所見,類型參數已在TextMessage
和IntegerMessage
類中指定
沒用
這可能會對您有所幫助,您可以在 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.