Java 如何用泛型参数重写具有对象参数的方法?
我要重写具有类型为Java 如何用泛型参数重写具有对象参数的方法?,java,generics,parameters,type-erasure,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
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
此行有多个标记
-类型参数T正在隐藏类型T
-名称冲突:TextField类型的方法setValue(T)具有
与JFormattedTextField类型的setValue(对象)相同的擦除,但没有
覆盖它
-TextField类型的方法setValue(T)必须重写或
实现一个超类型方法
不能使重写方法接受比其重写的方法更窄的类型
如果可以,可以执行以下操作:
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
A类{
公共设置值(对象o){…}
}
B类扩展了A类{
@凌驾
公共设置值(TO){…};
}
A=新的B();//这是有效的
a、 设置值(新整数(123));//这一行可以编译,但在运行时没有意义
使用:
publicsvoidsetvalue(to){…};
那么
a.setValue(新整数(123))就没有问题了代码>。只需定义为aaa=newb()
您可以通过用所需的类替换对象使其更窄。这可能就是您要寻找的。您不能使重写方法接受比它重写的方法更窄的类型,句号。但是为什么a.setValue(新整数(123))代码>工作,因为Integer
继承自Object
?@Jonas:因为变量a
持有类型为B
的对象,而B
中的重写方法将被调用。变量的类型与方法绑定无关,它存储的对象的类型与此无关。这不起作用:此行有多个标记-标记“public”上的语法错误,删除此标记-TextField类型的方法setValue(t)必须重写或实现超类型方法-名称冲突:方法setValue(t)TextField类型的具有与JFormattedTextField类型的setValue(对象)相同的擦除,但不覆盖它
TryTextField
No,它不起作用。你的方法签名是错误的。它应该返回void
。对于我来说,使用而不是简单的帮助+1.
<T extends Object> public void setValue(T o) {…};