我想覆盖参数类型为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
答案 0 :(得分:4)
你不能使重写方法接受比它重写的方法更窄的类型。
如果可以,可以采取以下措施:
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
答案 1 :(得分:-2)
使用:
<T extends Object> public void setValue(T o) {…};
然后a.setValue(new Integer(123));
没有问题。只需定义为A a = new B();
您可以通过将Object
替换为所需的类来缩小范围。