2012-04-04 5 views
1

Ich habe es ein wenig gelesen und ich verstehe, dass Sie in Java den ursprünglichen Wert der gegebenen Parameter nicht ändern können und erwarten, dass diese nach der Methode bestehen bleiben. Aber ich würde wirklich gerne einen guten Weg kennen, dies zu tun. Könnte mir jemand Hinweise geben, was ich tun könnte, damit diese Methode funktioniert? Vielen Dank.Setzen Sie Parameter auf persistente Werte

/** 
* This will set values in the given array to be "" (or empty strings) if they are null values 
* 
* @param checkNull 
*/ 
public static void setNullValuesBlank(String... checkNull) { 
    for (int i = 0; i < checkNull.length; i++) { 
    String check = checkNull[i]; 
    if (check == null) { 
     check = ""; 
    } 
    } 
} 

EDIT

So habe ich es auf das Array zu setzen, wie mehrere Personen erwähnt, und es funktioniert super, wenn ich das Array in erster Linie konstruieren, aber wenn ich dann tue es nicht funktioniert nicht.

Hier ist die feste Methode:

/** 
    * This will set values in the given array to be "" (or empty strings) if they are null values 
    * 
    * @param checkNull 
    */ 
public static void setNullValuesBlank(String... checkNull) { 
    for (int i = 0; i < checkNull.length; i++) { 
    if (checkNull[i] == null) { 
     checkNull[i] = ""; 
    } 
    } 
} 

Hier ist ein Anruf, wo es funktioniert:

String s = null; 
String a = null; 
String[] arry = new String[]{s, a}; 
for (int i = 0; i < arry.length; i++) { 
    System.out.println(i + ": " + arry[i]); 
} 
setNullValuesBlank(arry); 
for (int i = 0; i < arry.length; i++) { 
    System.out.println(i + ": " + arry[i]); 
} 

hier ein Anruf, wo es nicht Arbeit, aber ich möchte es:

String q = null; 
String x = null; 
System.out.println("q: " + q); 
System.out.println("x: " + x); 
setNullValuesBlank(q, x); 
System.out.println("q: " + q); 
System.out.println("x: " + x); 

Ausgabe davon:

q: null 
x: null 
q: null 
x: null 

Antwort

1

Sie müssen das Array zuweisen:

if (checkNull[i] == null) { 
    checkNull[i] = ""; 
} 

zum Check Zuordnung wird das Array nicht ändern.

+0

Gibt es eine Möglichkeit für mich nicht das Array in erster Linie zu konstruieren, haben? – kentcdodds

+0

Sie müssen es konstruieren, da Sie in normalen var args das gleiche Problem wie im ursprünglichen Szenario haben, da ein Array mit den Objekten aus den Parametern für den Methodenaufruf konstruiert wird. – MByD

+0

Ich bin nicht ganz sicher, dass ich dir folge und ich verstehe nicht, warum es nicht funktionieren würde, aber ich denke, du hast recht, leider ... – kentcdodds

0
public static void setNullValuesBlank(String... checkNull) 
{ 
    for(int i = 0; i < checkNull.length; i++) if(checkNull[i] == null) checkNull[i] = ""; 
} 
+0

Gibt es eine Möglichkeit für mich, das Array überhaupt nicht zu konstruieren? – kentcdodds

+0

@kentcdodds Ja, übergeben Sie die Zeichenfolgen jeweils als Parameter, dh 'setNullValuesBlank (str1, str2, str3);' –

+0

Aus irgendeinem Grund funktioniert das nicht für mich (siehe meine Bearbeitung). – kentcdodds

0

Sie haben den Wert auf das Array zu speichern:

import java.util.Arrays; 

public class NullCheck { 

    public static void main(final String[] args) { 
     final String[] sa = { null, null }; 
     System.out.println(Arrays.toString(sa)); 
     check(sa); 
     System.out.println(Arrays.toString(sa)); 
    } 

    private static void check(final String... a) { 
     for (int i = 0; i < a.length; i++) { 
      if (a[i] == null) a[i] = ""; 
     } 
    } 

} 
+0

Gibt es eine Möglichkeit für mich, das Array nicht erst aufbauen zu müssen? – kentcdodds