Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解释器多参数操作码的处理_Java_Oop_Design Patterns - Fatal编程技术网

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)也是有效的。