有两个类 X, Y 实现了一个 Base 接口(interface) 有一个接口(interface)负责处理每种类型的对象
interface Base {
}
class X implements Base {
}
class Y implements Base {
}
interface XProcessor {
void process(X object);
}
interface YProcessor {
void process(Y object);
}
但这种方法的缺点是我必须为每种类型的对象(X,y..)公开一个接口(interface),如果有很多这样的对象,我最终会公开太多的接口(interface)。我想我会通过只公开一个接口(interface)来处理这个问题,该接口(interface)负责处理 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(??);
}
有没有更好的方法来处理这个问题?
最佳答案
正如@tredontho 所建议的,可以使用如下所示的工厂“ProcessorFactory”来获取相关实例,然后调用流程方法
public class ProcessTest {
<T extends Base> void processBase(T base) {
ProcessorFactory.getProcessor(base).process(base);
}
}
interface Base{
}
class X implements Base{
}
class Y implements Base{
}
interface Processor<E extends Base>{
void process(E object);
}
interface XProcessor extends Processor<X> {
}
interface YProcessor extends Processor<Y> {
}
class ProcessorFactory {
@SuppressWarnings("unchecked")
static <T extends Base> Processor<T> getProcessor(T base) {
if (base instanceof X) {
return (Processor<T>) new XProcessorImpl();
}
return null;
}
}
class XProcessorImpl implements XProcessor {
@Override
public void process(X object) {
// TODO Auto-generated method stub
}
}
关于java - 通用接口(interface)与每种类型的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19250665/