を使用せずに、オブジェクトのタイプに基づいていくつかの操作を実行したいと思います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
それを使用することは悪い習慣であると読んだので、正直に反対です。この場合、それはまだ悪い習慣でしょうか?