2017-12-31 31 views
2

Ich habe nach demWie überschreiben Sie eine Funktion in Java richtig?

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; 

} 

meinen 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; 
    } 

} 
Dann

Schließlich meinen anderen abstrakten 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; 
    } 
} 

Die @Override Annotation Fehler gibt, dass „Methode nicht diese Methode nicht außer Kraft setzt aus seine Oberklasse ". Ich dachte seit CommonBo extends BaseBO, sollte die @Override Funktion überschreiben die Methode in BaseController?

basierend aktualisiert am @Slaks

antworten
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; 
    } 
} 
+3

Sie müssen Typparameter für Ihren Basistyp angeben. – SLaks

+0

Ich hoffe es ist nicht zu viel verlangt. Könnten Sie die Antwort in einem Codebeispiel posten? – abiieez

+0

erweitert "CommonPersist" 'BasePersist'? –

Antwort

3

Ihre CommonController Klasse BaseController erstreckt, aber keine Typparameter (<...>) angeben.

Daher interpretiert der Compiler das als BaseController<Object, Object>.

Ihre Methode akzeptiert Object nicht als Parameter, daher stimmt sie nicht mit dem Basistyp überein.

Sie müssen Typparameter in der extends Klausel angeben:

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

Es funktioniert jetzt. Danke für den Zeiger! – abiieez

Verwandte Themen