Java 如何重写使用原始类型的方法?
我有以下无法更改的旧类:Java 如何重写使用原始类型的方法?,java,generics,raw-types,Java,Generics,Raw Types,我有以下无法更改的旧类: import java.util.logging.Logger; 公共类超类 { // ... 公共记录器getLogger(c类){ // ... } } 我想重写类中的getLogger方法。可以不使用吗?如评论中所述,您不能覆盖。这也是有意义的,因为重写仅仅意味着可以用超类完成的任何操作也可以用子类完成。如果超类getLogger可以接受Class(所有类型),那么子类也应该允许这样做 在这种情况下,如果符合您的目的,您可以创建桥接方法: class SubCl
import java.util.logging.Logger;
公共类超类
{
// ...
公共记录器getLogger(c类){
// ...
}
}
我想重写类中的
getLogger
方法。可以不使用吗?如评论中所述,您不能覆盖。这也是有意义的,因为重写仅仅意味着可以用超类完成的任何操作也可以用子类完成。如果超类getLogger
可以接受Class
(所有类型),那么子类也应该允许这样做
在这种情况下,如果符合您的目的,您可以创建桥接方法:
class SubClass<T> extends SuperClass {
@Override
public Logger getLogger(Class c) {
return getLoggerT(c);
}
public Logger getLoggerT(Class<T> c) {
return super.getLogger(c);
}
}
class子类扩展了超类{
@凌驾
公共记录器getLogger(c类){
返回getLoggerT(c);
}
公共记录器getLoggerT(c类){
返回super.getLogger(c);
}
}
这个类可以一直使用。只是出于好奇:你宁愿用什么来代替
类c
<代码>类?不,您只能使用原始通用代码。这应该不是问题,您只需要在@SuppressWarnings(“rawtypes”)
旁边添加@Override
,这样您就不会收到任何编译器警告。@ernest_k是的,Class
是可以接受的,但如果您使用的代码早于Java 5,即2004年或更早的Java代码,我不能使用它,你只需要忍受这些怪癖,一个选择就是更新你的依赖关系。我不明白为什么我们不能用c类
代替c类
。为什么这是不允许的?