亲切的问候......
我在PHP中使用它。
function Func0($sString1,$iInteger0,$sString2) {
$OrigArgs = func_get_args();//The arguments
Func1($OrigArgs,1);
}
function Func1($OriginalArgs,$AddedArg) {
$NumFirstArgs = size($OriginalArgs);
if ($NumFirstArgs>3) {
print("you have more than 3 arguments originally");
}
}
我需要将上面的代码翻译成Java
我需要在java中捕获原始参数/参数并在其他函数中使用它们......
正如您所看到的,根据Java,参数可以使用不同的类型。
public void Func0(String sString1,int iInteger0,String sString2) {
Object[] OrigArgs = func_get_args();//The arguments
Func1(OrigArgs,1);
}
public void Func1(Object[] OriginalArgs,int AddedArg) {
int NumFirstArgs = OriginalArgs.length;
if (NumFirstArgs>3) {
System.out.println("you have more than 3 arguments originally");
}
}
谢谢,
答案 0 :(得分:1)
public Object[] func_get_args(Object... argv) {
int TheSize = 0;
for (int i = 0; i<argv.length; i++) {
if(argv[i]!= null && argv[i].getClass().isArray()) {
Object[] OneArray = (Object [])argv[i];
TheSize += OneArray.length;
} else {
TheSize += 1;
}
}
Object[] NewArray = new Object[TheSize];
int ThePos = 0;
for (int i = 0; i<argv.length; i++) {
if(argv[i]!= null && argv[i].getClass().isArray()) {
Object[] OneArray = (Object [])argv[i];
System.arraycopy(OneArray, 0, NewArray, ThePos, OneArray.length);
ThePos += OneArray.length;
} else {
Object[] OneArray = {argv[i]};
System.arraycopy(OneArray, 0, NewArray, ThePos, 1);
ThePos += 1;
}
}
return NewArray;
}
使用新方法:
String Name = "AStringExample";
String Style = "TheStyle";
Object[] argv = {7,9};
Object[] argc = {Name,Style};
Object[] NewArray = func_get_args(argv,Name,Style,argc);
for (int i = 0; i < NewArray.length;i++) {
System.out.println("i="+i+" -> "+NewArray[i].toString());
}
输出:
i=0 -> 7
i=1 -> 9
i=2 -> AStringExample
i=3 -> TheStyle
i=4 -> AStringExample
i=5 -> TheStyle
像问题一样使用:
public void Func0(String sString1,int iInteger0,String sString2) {
Object[] OrigArgs = func_get_args(sString1,iInteger0,sString2);//The arguments
Func1(OrigArgs,1);
}
public void Func1(Object[] OriginalArgs,int AddedArg) {
int NumFirstArgs = OriginalArgs.length;
if (NumFirstArgs>3) {
System.out.println("you have more than 3 arguments originally");
}
}
答案 1 :(得分:0)
如果你有一个像Object... foo
这样的最后一个参数,那么foo
将是所有varargs的数组,即除了非变量参数之外的所有“其余”参数。换句话说,您可以将您的函数声明为
public void Func0(String sString1, int iInteger0, String sString2, Object... more)
但more
只会在第3个之后包含参数。
要与原始代码最匹配,您可以(sString1
,iInteger0
和sString2
不再是参数,如果需要,您必须手动提取它们) :
public void Func0(Object... OrigArgs) {
Func1(OrigArgs,1);
}
public void Func1(Object[] OriginalArgs,int AddedArg) {
int NumFirstArgs = OriginalArgs.length;
if (NumFirstArgs>3) {
System.out.println("you have more than 3 arguments originally");
}
}