Java 解释器多参数操作码的处理
我正在研究一个简单的口译员,以了解他们如何工作 我有几个方面不确定 我应该如何处理不同参数的操作码 我可以吃点像:Java 解释器多参数操作码的处理,java,oop,design-patterns,Java,Oop,Design Patterns,我正在研究一个简单的口译员,以了解他们如何工作 我有几个方面不确定 我应该如何处理不同参数的操作码 我可以吃点像: void execute(int opcode, int arg1, int arg2, int arg3, Machine m); 然而,这: -Limits me to 3 args -Forces me to supply dummy args for opcodes taking less args 口译员通常以什么方式处理此问题 我当然可以推一个int数组,但我想知道
void execute(int opcode, int arg1, int arg2, int arg3, Machine m);
然而,这:
-Limits me to 3 args
-Forces me to supply dummy args for opcodes taking less args
口译员通常以什么方式处理此问题
我当然可以推一个int数组,但我想知道是否有更好的方法
谢谢使用varargs符号 将您的方法定义为:
void execute(int opcode, Machine m, int... args);
现在您可以使用args
,就像一个int数组(int[]
)
这意味着所有这些符号都将起作用:
execute(opcode, m, arg1);
execute(opcode, m, arg1, arg2);
execute(opcode, m, arg1, arg2, arg3);
execute(opcode, m, arg1, arg2, arg3, arg4);
重要提示:如果有两个相同类型的参数,其中一个是varargs,则必须将varargs放在单数参数后面,以防止歧义
正如Elliot正确指出的那样:当存在其他参数时,它也必须是最后一个参数。一个澄清,只有最后一个参数可以是可变长度。@ElliottFrisch:好的,我认为它只与相同类型的变量有关。这在其他语言中可能是正确的。另一个注意事项是,varargs使args完全是可选的。。。so
execute(操作码,m)代码>也是有效的。