我目前正在实现一个函数,使用超类作为参数.
例如:
private void foo(Parent parent) {
if(parent.getClass() == Child1.class) {
Child1 c1 = (Child1) parent;
System.out.println(c1.getChild1Attribute());
}
else if(parent.getClass() == Child2.class) {
Child2 c2 = (Child2) parent;
System.out.println(c1.getChild2Attribute());
}
else if(parent.getClass() == Parent.class) {
System.out.println(parent.getParentAttribute());
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个坏主意吗?
我在这里读到了一些线索,说使用getClass()或是instanceof不好的设计:
它不一定是一个糟糕的设计,但它表明可能会出现问题.
您的具体情况看起来很糟糕,因为看起来单个方法可以识别多个类.这可能表示您错过了过载的可能性,或者有机会使用多个调度模式之一:
// Three overloads - one per target class
private void foo(Parent obj) {
}
private void foo(Child1 obj) {
}
private void foo(Child2 obj) {
}
Run Code Online (Sandbox Code Playgroud)
常见的多个调度模式之一是访问者模式,看它是否适用于您正在解决的问题.