【发布时间】:2013-01-16 11:24:31
【问题描述】:
前提:在我的项目中,我有两个通用类型的接口,分别定义了请求和响应。处理请求以产生响应,因此每个响应都是基于请求构建的。处理器接口处理请求以构建相应的响应。
代码:请求和响应接口为:
interface Request<T1>
和
interface Response<T2>
其中T2 和T1 分别代表通用请求和响应类型(为了清楚起见,我特意用不同的名称称呼它们)。
现在,由于T2 是一个请求,而T1 是一个响应,所以上面的代码演变为:
interface Request<T1 extends Response>
和
interface Response<T2 extends Request>
请注意:Request 和 Response 接口不共享任何继承关系 - 上面的代码只打算通信的是:Request 仅使用其他类型,即 Response。 p>
现在,考虑 Request 接口:由于 Response 再次被键入,并且由请求构建的响应将绑定到原始请求类型,因此,上述代码演变为:
interface Request<T1 extends Response<? extends Request<T1>>>
和
interface Response<T2 extends Request<? extends Response<T2>>
现在,处理器接口定义为:
interface Processor<R1 extends Request<R2>, R2 extends Response<R1>> {
R2 process(R1 request);
}
具体类:
请求实现:
class ConcreteRequest implements Request<ConcreteResponse> {
ConcreteResponse response;
...`
}
响应实现:
class ConcreteResponse implements Response<ConcreteRequest> {
ConcreteRequest request;
...
}
处理器实现:
class ConcreteProcessor implements Processor<ConcreteRequest, ConcreteResponse> {
ConcreteResponse process(ConcreteRequest request) {
...
}
}
问题:上面的代码是否过度设计?是否有一种简化的方法来表示互补输入输出对象的元组?
【问题讨论】:
-
抱歉,您能否再解释一下...
Request<T1 extends Response>为什么T1和Request会扩展Response类型? -
@Vijay:T1 不是响应,它是通用类型,表示如果处理它最终将生成响应...例如 List
表示包含 String 对象作为其元素……这就是你要问的吗? -
在
Request和Response中使用泛型有什么好处?一个简单而具体的例子在这里会大有帮助。 -
@David: ...我的问题是:上面的代码是否过度设计? :) 我想我看到了你的答案......