Java错误:名称冲突:类中的方法重写一个方法,其擦除方法与另一个方法相同,但都不会覆盖另一个方法

时间:2018-03-26 12:19:35

标签: java generics type-erasure erasure name-clash

我的项目代码如下:

public class CommandValidator extends AbstractValidator<CommandTransaction> {
    @Override
    public boolean validate(CommandTransaction object) {
        return false;
    }
}

public abstract class AbstractValidator<T> implements Validator<T>{
    @Override
    public boolean validate(T object) {
        return false;
    }
}

public interface Validator<T> {
     default boolean validate(T object) throws Exception {
         return false;
     }
}

我尝试编译时遇到错误:

[ERROR] error: name clash: validate(CommandTransaction) in CommandValidator overrides a method whose erasure is the same as another method, yet neither overrides the other
[ERROR] first method:  validate(Object) in Validator
[ERROR] second method: validate(T) in AbstractValidator
[ERROR] where T is a type-variable:
[ERROR] T extends Object declared in class AbstractValidator

知道导致错误的原因是什么?为什么第一种方法有Object而不是泛型validate(Object)

0 个答案:

没有答案