2012-04-04 3 views
1

Я немного поучаствовал в этом, и я понимаю, что в java вы не можете изменить исходное значение заданных параметров и ожидать, что они будут сохраняться после завершения метода. Но я бы очень хотел узнать, как это сделать. Может ли кто-нибудь дать мне несколько указателей на то, что я могу сделать, чтобы этот метод работал? Благодарю.Установить параметры постоянных значений

/** 
* 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

Так что я должен установить его в массив, как упоминалось несколько человек, и он прекрасно работает, если я построить массив, в первую очередь, но если я не то его не работает.

Вот фиксированный метод:

/** 
    * 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] = ""; 
    } 
    } 
} 

Вот вызов, где он работает:

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

Вот вызов, где он не работу, но я хочу, чтобы:

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

Результат:

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

ответ

1

Вам необходимо присвоить массив:

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

Назначение для проверки не изменит массив.

+0

Есть ли способ для меня, чтобы не построить массив в первую очередь? – kentcdodds

+0

Вам нужно его построить, поскольку в обычных аргументах var у вас есть та же проблема, что и в исходном сценарии, поскольку для вызова метода построен массив с объектами из параметров. – MByD

+0

Я не совсем уверен, что следую за вами, и я не понимаю, почему это не сработает, но я думаю, что вы правы, к сожалению ... – kentcdodds

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

Есть ли какой-нибудь способ для меня не создавать массив в первую очередь? – kentcdodds

+0

@kentcdodds Да, передайте строки как параметр, т. Е. SetNullValuesBlank (str1, str2, str3); ' –

+0

По какой-то причине это не работает для меня (см. Мое редактирование). – kentcdodds

0

Вы должны сохранить значение в массив:

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

Есть ли какой-нибудь способ для меня не создавать массив в первую очередь? – kentcdodds

Смежные вопросы