无法覆盖 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);
}
}
如您所见,类型参数已在 TextMessage
和 IntegerMessage
类
中指定
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);
}
}
如您所见,类型参数已在 TextMessage
和 IntegerMessage
类