我是泛型新手。我有一個帶有抽象方法的抽象類(1)。我有另一個抽象類 (2),其中包含一些我希望在某些 DTO (3,4) 中共享的抽象方法。我想要(1)的具體擴展來處理擴展(2)的任何事情。
1.
//I want R to be anything here
public abstract class AggregatedEmailerRoute<R> extends RouteBuilder {
public static String EMAILER_ROUTE = "direct:aggregated-emailer-route";
@Override
public void configure() throws Exception {
from(EMAILER_ROUTE)
.bean(this, "convertToEmailBody(${body},${headers})")
.to("mock:wherever");
}
protected abstract String convertToEmailBody(List<R> body, Map<String,Object> headers);
public abstract class StagingError { //or should this be an interface?
public abstract Integer getId();
public abstract String getErrorNote();
public abstract LocalDateTime getErrorDate();
}
兩個擴展 StagingError 的類:3。
public class Bill extends StagingError {
private Integer id;
private String errorNote;
private LocalDateTime getErrorDate;
//other fields, getters/setters
public class Payment extends StagingError {
private Integer id;
private String errorNote;
private LocalDateTime getErrorDate;
//other fields, getters/setters
public class StagingEmailErrorRoute extends AggregatedEmailerRoute<R extends StagingError> {
@Override
public void configure() throws Exception {
super.configure();
from(jpa(Bill.class.getName())
.query("some query")
)
.to(EMAILER_ROUTE);
from(jpa(Payment.class.getName())
.query("some other query")
)
.to(EMAILER_ROUTE);
}
@Override //But here I want to work on anything that implements StagingError so this method can work on Payment OR Bill
protected String convertToEmailBody(List<T extends StagingError> body, Map<String,Object> headers) {
return
body
.stream()
.map(e -> "Staging entity ID: " e.getId()
"\n\tError: " e.getErrorNote()
"\n\tWhen: " format("%tc",e.getErrorDate().atZone(EST.get()))
"\n")
.collect(joining("\n"));
uj5u.com熱心網友回復:
理解
我希望這會有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/415136.html
標籤:
