【发布时间】:2016-02-25 13:47:57
【问题描述】:
我目前是两个班。带有简单属性“responseCode”的响应。响应有一个静态实例(当它是 KO 时是一个简单的响应)。
我还有一个类 DetailResponse,它是我的类 Response 的子类。
我要做的是能够在 Response 类中使用我的静态变量 KO_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 扩展了 Response :
public class DetailResponse extends Response {
public String otherField;
}
商务服务类:
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实例,并带有适当的返回码,而不需要额外的数据?您不能使用静态字段并在运行时更改其类型,如果您想使用静态字段(或静态工厂方法),您必须为每种类型提供一个并相应地选择。 -
您是否需要让
Response.KO_RESPONSE成为(非详细信息)Response?还是它总是DetailResponse类型? -
@Thomas 我猜你是对的。我想做一些容易阅读的事情。我认为可以用泛型类型和静态工厂做一些事情,但它仍然会比简单的构造函数更复杂。
-
@bradimus 是的,它将是一个 DetailResponse。
-
然后要么按照@Thomas 的建议去做,要么将静态实例移到子类中。
标签: java inheritance static