さまざまな言語構造を表すクラス階層があります。
Expression <- NumericLiteral
UnaryExpression
BinaryExpression
IndexingExpression
IteratedExpression
...
これらのクラスのオブジェクトは、さまざまな構造チェックを実行する必要がある複雑なツリー階層を形成します。たとえば、ノードが IteratedExpression の場合、その最初の子は IndexingExpression にする必要があります。チェックに含まれるレベルが 1 つだけの場合は、Visitor パターンを使用できますが、以下の例のようにより複雑なケースでは、instanceof を使用しています。
void visit(IteratedExpression node) {
if (!(node.getChild(0) instanceof IndexingExpression)) {
// report error
}
}
それは instanceof の適切な使用ですか、それとも私の設計に欠陥がありますか? 代替手段は何ですか?
いくつかの代替案が提案されたので、質問の最初の部分を強調したいと思います。
それは instanceof の適切な使用ですか、それとも私の設計に欠陥がありますか?