如果我有一个通用基类:
public class BaseExample<T> {
public void doTheThing(T value) {...}
}
我想将它子类化,以便我可以为不同的类型执行TheThing:
public class SubExample extends BaseExample {
public void doTheThing(String value) { ... }
public void doTheThing(Integer value) { ... }
}
有没有办法比这更好地做到这一点:
public class SubExample<T> extends BaseExample<T> {
@Override
public void doTheThing(T value) {
if (value instanceof String) {
doTheThing((String) value);
} else if (value instanceof Integer) {
doTheThing((Integer) value);
} else {
dontDoTheThing();
}
}
public void doTheThing(String value) { ... }
public void doTheThing(Integer value) { ... }
}
注意:我希望通过以下方式调用:
BaseExample example = new SubExample()
example.doTheThing("Hello world");
另请注意,在我的情况下,Base类位于我无法控制的库中,因此我无法修改基类。
[编辑]回答这个问题为什么我要这个呢?
如果没有更多的背景,有点难以描述,但我会尝试。
这是整个处理管道的一部分,其中BaseExample的子类的不同实例被实例化以处理不同类型对象的响应。传入对象时,管道将这些对象传递给处理链中的子类。框架的期望是每个子类实例只处理一种类型的对象,但在我的例子中,我需要能够在一个实例中处理不同的类型,并且这些类型的处理明显不同。