【发布时间】:2013-10-08 14:35:23
【问题描述】:
有两个类 X、Y 实现了 Base 接口 有一个接口负责处理每种类型的对象
interface Base {
}
class X implements Base {
}
class Y implements Base {
}
interface XProcessor {
void process(X object);
}
interface YProcessor {
void process(Y object);
}
但是这种方法的缺点是我必须为每种类型的对象(X,y..)公开一个接口,如果有很多这样的对象,我最终会暴露太多接口。我想我会通过只公开一个接口来处理这个问题,该接口负责处理 Base 类型的对象
interface Processor<E extends Base> {
void process(E object);
}
实现者编写自己的实现来处理类型 X 的对象
class XProcessor implements Processor<X> {
void process(X object) {
//do something
}
}
这种方法的问题是当我必须调用方法进程时,在运行时,我不知道应该将哪种类型的对象传递给处理器,因为在运行时我无法确定该处理器的类型
void process(Processor p) {
p.process(??);
}
有没有更好的方法来处理这个问题?
【问题讨论】:
-
这里的问题是:为什么你真的需要在运行时知道类?如果您无法概括该过程,请使用每个班级。
-
这可以用
Factory处理不同的Processors 吗?
标签: java generics generic-programming type-erasure