我目前是兩個類。響應一個簡單的屬性「responseCode」。響應有一個靜態實例(當它是KO時,它是一個簡單的響應)。如何返回子類中的靜態實例類型
我也有一個類DetailResponse這是我的類響應的子類。
我會做的是能夠使用靜態變量KO_RESPONSE在Response類中返回類型爲DetailResponse的對象。有沒有辦法簡單地做到這一點?
我的超類響應:
public class Response {
public static final Response KO_RESPONSE = new A(ReturnCode.KO);
public ReturnCode responseCode;
public String comment;
public Response() {};
public Response (ReturnCode responseCode) {
this.responseCode = responseCode;
}
public static enum ReturnCode {
OK,
KO;
}
}
我的子類DetailResponse延伸響應:
public class DetailResponse extends Response {
public String otherField;
}
BuisinessService類:
public BuisinessService {
public DetailResponse sendRequest() {
String status = sendRequest() // Do something
if(status.equals("KO")) {
return Response.KO_RESPONSE; // What I would do but doesn't work because Response is the super class of DetailResponse
} else {
DetailResponse detail = new DetailResponse(ReturnCode.OK);
detail.comment = "comment";
detail.otherField = "somethingCool";
return detail;
}
}
}
爲什麼不使用你是否僅僅用適當的返回碼返回了一個'DetailResponse'的新實例,而沒有額外的數據呢?如果要使用靜態字段(或靜態工廠方法),則必須爲每種類型提供一個靜態字段並相應地進行選擇,您無法在運行時使用靜態字段並更改其類型。 – Thomas
您是否需要將'Response.KO_RESPONSE'永遠作爲(非詳細)'Response'?或者它總是屬於'DetailResponse'類型? – bradimus
@Thomas我想你是對的。我期待着做一些容易閱讀的東西。我認爲有可能用泛型類型和靜態工廠做一些事情,但它仍然比簡單的構造函數更復雜。 –