Java中泛型,子类化和方法覆盖的交互

时间:2016-08-25 23:06:14

标签: java

如果我有一个通用基类:

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的子类的不同实例被实例化以处理不同类型对象的响应。传入对象时,管道将这些对象传递给处理链中的子类。框架的期望是每个子类实例只处理一种类型的对象,但在我的例子中,我需要能够在一个实例中处理不同的类型,并且这些类型的处理明显不同。

0 个答案:

没有答案