java - 如何用泛型参数覆盖具有对象参数的方法?

标签 java generics parameters type-erasure

我想重写具有 Object 类型参数的方法:

public void setValue(Object value) {
    // ...
}

并使该参数具有泛型类型T:

@Override
public void setValue(T value) {
    super.setValue(value);
}

如何在 Java 中执行此操作?

在 Eclipse 中我收到以下错误:

Multiple markers at this line
- The type parameter T is hiding the type T
- Name clash: The method setValue(T) of type TextField<T> has the 
 same erasure as setValue(Object) of type JFormattedTextField but does not 
 override it
- The method setValue(T) of type TextField<T> must override or 
 implement a supertype method

最佳答案

您不能使重写方法接受比它所重写的方法更窄的类型。

如果可以的话,以下是可能的:

class A {
    public setValue(Object o) {…}
}

class B<T> extends A {
    @Override
    public setValue(T o) {…};
}

A a = new B<String>(); // this is valid
a.setValue(new Integer(123)); // this line would compile, but make no sense at runtime 

关于java - 如何用泛型参数覆盖具有对象参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8319438/

相关文章:

java - 泛型中类型参数中的常量

c# - 尝试设计一个小型消息处理程序类来模拟 C# 事件。这种方法有什么缺点?

function - 定义将参数传递给函数的宏

java - 抽象类没有 arg 构造函数

java - JPanel 文本的搜索栏

java - 如何从 RegionBootstrap AltBeacon 方法中获取可见信标

返回 XML 的 Java 函数。

可能的 Java 泛型(模板)特化(用特定类型覆盖模板类型)

c - '->' 标记之前的预期主表达式

java - 如何使用数据库对 Java 代码中的用户进行身份验证