1

亲切的问候...

我在 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");
  }
}

谢谢,

4

2 回答 2

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");
  }
}
于 2013-09-05T04:32:06.867 回答
0

如果您有最后一个参数Object... foo,那么foo将是所有可变参数的数组,即除非可变参数之外的所有“其余”参数。换句话说,您可以将您的函数声明为

public void Func0(String sString1, int iInteger0, String sString2, Object... more)

more只会包含第三个之后的论点。

为了最接近您的原始代码,您将执行 ( sString1, iInteger0, andsString2不再是参数,如果需要,您必须手动提取它们):

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");
  }
}
于 2013-06-28T02:03:24.343 回答