我想根据对象的类型执行几个操作,而不使用instanceof
. 起初我正在考虑基于类型重载方法(如下所示),并认为Java可能会适当地选择方法(基于最具体的对象类)。
import java.util.ArrayList;
import java.util.List;
public class TestA {
public static void main(String[] args)
{
List<Object> list = new ArrayList();
list.add(new A());
list.add(new B());
list.add(new C());
list.add(new Object());
TestA tester = new TestA();
for(Object o: list)
{
tester.print(o);
}
}
private void print(A o)
{
System.out.println("A");
}
private void print(B o)
{
System.out.println("B");
}
private void print(C o)
{
System.out.println("C");
}
private void print(Object o)
{
System.out.println("Object");
}
}
class A {
}
class B extends A {
}
class C {
}
输出是:
Object
Object
Object
Object
但是我追求的输出是:
A
B
C
Object
- 有没有办法让Java根据参数对象的最具体类型来选择方法?
- 如果没有,我可以在没有帮助的情况下寻找这种功能的替代方案
instanceof
- 我实际上是在尝试模拟访问者模式,但是看起来,使访问者模式起作用的是因为双重调度,这使得在函数调用期间被“接受”的参数处于正确的类型,特别
visitor.accept(this)
是class A
导致函数visitor.accept(A o)
被调用. - 老实说,我反对,
instanceof
因为我读过使用它是不好的做法;在这种情况下,这仍然是不好的做法吗?