java - 如何正确覆盖 Java 中的函数?

标签 java

我有以下 BO

@Data
public abstract class CommonBO extends BaseBO{

    @NotBlank(message ="{validation.not.blank}")
    @Length(max = 100)
    String name;
}


@Data
@MappedSuperclass
public abstract class CommonPersist extends BasePersist {

    @Column(unique = true,nullable = false)
    private String name;

}

然后是我的 BaseController

public abstract class BaseController <T extends BasePersist, K extends BaseBO> {

 @RequestMapping(value = "/validate", method = RequestMethod.POST)
    @ResponseBody
    public ValidationResponse validate(@Valid K t,
                                       BindingResult result, Locale locale) {
        ValidationResponse res = new ValidationResponse();
        List<ErrorMessage> errorMessages = new ArrayList<>();
        if (!result.hasErrors()) {
            res.setStatus(MessageTypes.SUCCESS);
        } else {
            res.setStatus(MessageTypes.FAIL);
            List<FieldError> allErrors = result.getFieldErrors();
            errorMessages = new ArrayList<>();
            for (FieldError objectError : allErrors) {
                errorMessages.add(new ErrorMessage(objectError.getField(),
                        objectError.getDefaultMessage()));
            }
        }
        res.setErrorMessageList(errorMessages);
        return res;
    }

}

最后,我的另一个抽象 Controller

public abstract class CommonController<T extends CommonPersist, K extends CommonBO> extends BaseController {

  @Override
    public ValidationResponse validate(@Valid K t, BindingResult result, Locale locale) {
        ValidationResponse res = super.validate(t, result, locale);
        if (res.getStatus().equalsIgnoreCase(MessageTypes.SUCCESS)) {
            if (commonService.checkIfNameIsUsed(t.getName(), t.getId())) {
                ErrorMessage em = new ErrorMessage("name", messageSource.getMessage("error.duplicate.is.used", null, locale));
                res.getErrorMessageList().add(em);
                res.setStatus(MessageTypes.FAIL);
            }
        }
        return res;
    }
}

@Override 注释给出了“方法不覆盖其父类(super class)中的方法”的错误。我认为既然 CommonBo extends BaseBO,@Override 函数应该覆盖 BaseController 中的方法?

已更新

基于@Slaks 的回答

public abstract class CommonController<T extends CommonPersist, K extends CommonBO> extends BaseController<T,K> {

@Override
    public ValidationResponse validate(@Valid K t, BindingResult result, Locale locale) {
        ValidationResponse res = super.validate(t, result, locale);
        if (res.getStatus().equalsIgnoreCase(MessageTypes.SUCCESS)) {
            if (commonService.checkIfNameIsUsed(t.getName(), t.getId())) {
                ErrorMessage em = new ErrorMessage("name", messageSource.getMessage("error.duplicate.is.used", null, locale));
                res.getErrorMessageList().add(em);
                res.setStatus(MessageTypes.FAIL);
            }
        }
        return res;
    }
}

最佳答案

你的 CommonController类扩展 BaseController , 但未指定任何类型参数 ( <...> )。

因此,编译器将其解释为 BaseController<Object, Object> .

你的方法不需要 Object作为参数,因此它与基本类型不匹配。

您需要在 extends 中指定类型参数子句:

public abstract class
  CommonController<T extends CommonPersist, K extends CommonBO>
       extends BaseController<T,K> {

关于java - 如何正确覆盖 Java 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48045420/

相关文章:

java - 分析 OnPrem 和 AWS 环境之间的 SQL 查询性能

java - 从java中的main方法调用另一个方法

Java Hibernate + spring-data : Cascading Childs not working when Parent is persistent

java - Spring Boot App 适用于本地 Tomcat 但不适用于远程服务器

java - Junit测试spring Controller mockMvc @ContextConfiguration

java - 是否可以制作具有 alpha 值的 Java SWT 组合?

java - 测试我的应用程序是否接受远程服务器的 SSL 证书

java - java中的静态 block 和静态变量

java - 通过命令行运行在 Eclipse IDE 中编写的使用 anltr3 语法的 java 程序

java - FLINK CEP (Java 8) - 通过匹配模式持久化 "identity"