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类
。为什么这是不允许的?