我正在尝试确定在 AspectJ 中调度类型的更好方法。假设我正在对具有三种节点的树执行计算。然后我可以编写一个简单的 Java 方法:
private void computation(TreeNode node) {
if (node instanceof Node0) {
// Do stuff.
} else
if (node instanceof Node0) {
// Do stuff.
} else
if (node instanceof Node0) {
// Do stuff.
}
}
或者
private void computation(TreeNode node) {
switch (node.kindNode()) {
case NODE0:
// Do stuff.
break;
case NODE1:
// Do stuff.
break;
case NODE2:
// Do stuff.
break;
}
}
或者我可以将一个方法注入每个节点类型:
private void Node.computation() {
throw new UnsupportedOperationException(getClass() + ".computation()");
}
private void Node0.computation() {
// Do stuff.
}
private void Node1.computation() {
// Do stuff.
}
private void Node2.computation() {
// Do stuff.
}
哪种方法更可取,为什么?