Вызов метода Java и использование тернарного оператора и назначить в параметрах? - PullRequest
4 голосов
/ 28 июня 2011

Я просматривал некоторый код и наткнулся на это:

 public static doSomething(String myString, String myString2) {
        //Stuff
 }

 public static doAnotherThing(String myString) {
      return doSomething(myString = myString != null ? myString.toLowerCase(): myString, null)
 }

Как это работает?Я не должен переназначать параметры метода, фактически они должны быть окончательными), но я не совсем уверен, как метод всегда получает 2 необходимых ему параметра.Я думаю, что да, так как у троичной переменной myString есть значение null, но я не совсем уверен, почему он будет там, когда myString не равен нулю?.

Ответы [ 6 ]

5 голосов
/ 28 июня 2011

Скобки на помощь!

doSomething(myString = ( ( myString != null ) ? myString.toLowerCase() : myString ), null)

Чтобы понять это, вам нужно знать две вещи:

  • Как работает троичный оператор
  • Фактчто оператор присваивания возвращает объект, который он присваивает
3 голосов
/ 28 июня 2011

Это просто более сложная версия:

public static doAnotherThing(String myString) 
{
  myString = myString != null ? myString.toLowerCase(): myString;
  return doSomething(myString, null) 
}

или даже

public static doAnotherThing(String myString) 
{
  String s = myString;
  if (myString != null)
      s = myString.toLowerCase();
  return doSomething(s, null) 
}
3 голосов
/ 28 июня 2011

doSomething получает два параметра, оба из которых являются строками. В doAnotherThing:

  • Первый параметр, переданный doSomething:
    • null, если myString равно null,
    • myString.toLowerCase() в противном случае.
  • Второй параметр, переданный doSomething, всегда null.

Это может быть более понятным, переписать так:

public static doAnotherThing(String myString)
{
    if (myString == null) return doSomething(null, null);
    else return doSomething(myString.toLowerCase(), null);
}
1 голос
/ 28 июня 2011

Код сбивает с толку, но я не уверен, в чем проблема. Результатом присваивания является присвоенное значение.

Это

 return doSomething(myString = myString != null ? myString.toLowerCase(): myString, null)

совпадает с

 if(myString != null) myString = myString.toLowerCase();
 return doSomething(myString, null)
1 голос
/ 28 июня 2011
myString = myString != null ? myString.toLowerCase(): myString

Этот фрагмент кода переназначает myString на myString.toLowerCase () или не переназначает его. Но использование оператора присваивания возвращает значение, которое было присвоено, таким образом, вы, по сути, вызываете это:

//if myString != null
doSomething(myString.toLowerCase(), null);

//or if myString is null
doSomething(myString /*which is null*/, null);

Следует также отметить, что строки являются неизменяемыми, и что изменение значения myString в doAnotherThing (String) не повлияет на строку, переданную в метод.

0 голосов
/ 15 марта 2016

Назначить в переменную из троичного оператора так:

minVal = (a < b) ? a : b;

Больше примеров: http://alvinalexander.com/java/edu/pj/pj010018

...