2013-06-27 6 views
1

Cordial Greetings ...Conversion Java de func_get_args PHP, varargs

Je l'ai en 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"); 
    } 
} 

Je dois traduire le code ci-dessus pour Java

J'ai besoin en java attraper les arguments à l'origine/paramètres et de les utiliser dans d'autres fonctions ...

Comme vous pouvez le voir les arguments peut être avec différents types selon 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"); 
    } 
} 

Merci,

+0

Où utilisez-vous varargs dans votre code PHP? – Achrome

+0

Oui, mais c'est rectifiable, Comme vous pouvez le voir, le problème est avec func_get_args(), je ne connais pas le groupement. Je pense en varargs, car peut être applicable ... –

Répondre

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; 
} 

En utilisant la nouvelle méthode:

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()); 
    } 

la sortie:

i=0 -> 7 
i=1 -> 9 
i=2 -> AStringExample 
i=3 -> TheStyle 
i=4 -> AStringExample 
i=5 -> TheStyle 

En utilisant comme la question:

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

Si vous avez un dernier paramètre comme Object... foo, alors foo sera un tableau de tous les varargs, c'est-à-dire tout le "reste" des paramètres autres que les arguments non variables. En d'autres termes, vous pouvez déclarer votre fonction

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

mais more ne contiendrait les arguments après la 3ème.

Pour le mieux correspondre à votre code d'origine, vous feriez (sString1, iInteger0 et sString2 sont pas de paramètres plus et vous devez les extraire manuellement si vous voulez):

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