Как использовать выходной параметр в Java?

Кто-то мог дать мне некоторый пример кода, который использует выходной параметр в функции? Я попробовал к Google его, но просто нашел его только в функциях. Я хотел бы использовать это выходное значение в другой функции.

Код я разрабатываю предназначенный, чтобы быть выполненным в Android.

59
задан Sled 8 November 2012 в 21:05
поделиться

4 ответа

Java передает значение; нет параметра out , как в C #.

Вы можете использовать return или изменить объект, переданный как ссылку ( на значение).

Связанные вопросы


Пример кода

public class FunctionSample {
    static String fReturn() {
        return "Hello!";
    }
    static void fArgNoWorkie(String s) {
        s = "What am I doing???"; // Doesn't "work"! Java passes by value!
    }
    static void fMutate(StringBuilder sb) {
        sb.append("Here you go!");
    }
    public static void main(String[] args) {
        String s = null;

        s = fReturn();
        System.out.println(s); // prints "Hello!"

        fArgNoWorkie(s);
        System.out.println(s); // prints "Hello!"

        StringBuilder sb = new StringBuilder();
        fMutate(sb);
        s = sb.toString();
        System.out.println(s); // prints "Here you go!"
    }

}

См. Также


Что касается кода , с которым OP нуждается в помощи, вот типичное решение использования специальное значение (обычно null для ссылочных типов) для обозначения успеха / неудачи:

Вместо:

String oPerson= null;
if (CheckAddress("5556", oPerson)) {
   print(oPerson); // DOESN'T "WORK"! Java passes by value; String is immutable!
}

private boolean CheckAddress(String iAddress, String oPerson) {
   // on search succeeded:
   oPerson = something; // DOESN'T "WORK"!
   return true;
   :
   // on search failed:
   return false;
}

Вместо этого используйте возвращаемый тип String с null , чтобы указать на сбой.

String person = checkAddress("5556");
if (person != null) {
   print(person);
}

private String checkAddress(String address) {
   // on search succeeded:
   return something;
   :
   // on search failed:
   return null;
}

Вот как работает java.io.BufferedReader.readLine () , например: он возвращает instanceof String (возможно, пустую строку!), Пока не вернет null , чтобы указать конец «поиска».

Конечно, это не ограничивается возвращаемым значением ссылочного типа. Ключ в том, что должно быть какое-то особое значение (я), которое никогда не является допустимым значением, и вы используете это значение для специальных целей.

Другой классический пример - String.indexOf : он возвращает -1 , чтобы указать на ошибку поиска.

Примечание : поскольку в Java нет концепции «входных» и «выходных» параметров, используются префиксы i- и o- (например, ] iAddress , oPerson ) не требуется и неидиоматичен.


Более общее решение

Если вам нужно вернуть несколько значений, обычно они каким-то образом связаны (например, координаты x и y одного Пункт ). Лучшим решением было бы объединить эти значения вместе. Люди использовали Object [] или List , или общую Pair , но на самом деле ваш собственный тип будет Лучший.

Для этой проблемы я рекомендую неизменяемый тип SearchResult , подобный этому, чтобы инкапсулировать результаты поиска логические и String :

public class SearchResult {
   public final String name;
   public final boolean isFound;

   public SearchResult(String name, boolean isFound) {
      this.name = name;
      this.isFound = isFound;
   }
}

Затем в вашей функции поиска , вы делаете следующее:

private SearchResult checkAddress(String address) {
  // on address search succeed
  return new SearchResult(foundName, true);
  :
  // on address search failed
  return new SearchResult(null, false);
}

И затем используете его так:

SearchResult sr = checkAddress("5556");
if (sr.isFound) {
  String name = sr.name;
  //...
}

Если хотите, вы можете (и, вероятно, должны) сделать final неизменяемые поля не общедоступными ], а взамен используйте общедоступные геттеры.

106
ответ дан 24 November 2019 в 18:17
поделиться

Вы можете использовать:

  • return X. это вернет только одно значение.

  • возвращаемый объект. вернет полный объект. Например, ваш объект может включать значения X, Y и Z.

  • передать массив. массивы передаются по ссылке. т.е. если вы передадите массив целых чисел, измените массив внутри метода, тогда исходный код увидит изменения.

Пример передачи массива.

void methodOne{
    int [] arr = {1,2,3};
    methodTwo(arr);
    ...//print arr here
}
void methodTwo(int [] arr){
    for (int i=0; i<arr.length;i++){
         arr[i]+=3;
    }
}

Будет напечатано: 4,5,6.

5
ответ дан 24 November 2019 в 18:17
поделиться

Спасибо. Я использую передачу объекта в качестве параметра. Мой код Android ниже

    String oPerson= null;
    if (CheckAddress("5556", oPerson))
    {
        Toast.makeText(this, 
                "It's Match! " + oPerson,                   
                Toast.LENGTH_LONG).show();
    }

    private boolean CheckAddress(String iAddress, String oPerson)
{
    Cursor cAddress = mDbHelper.getAllContacts();
    String address = "";        
    if (cAddress.getCount() > 0) {
        cAddress.moveToFirst();
        while (cAddress.isAfterLast() == false) {
            address = cAddress.getString(2).toString();
            oPerson = cAddress.getString(1).toString(); 
            if(iAddress.indexOf(address) != -1)
            {
                Toast.makeText(this, 
                        "Person : " + oPerson,                  
                        Toast.LENGTH_LONG).show();
                System.out.println(oPerson);
                cAddress.close();
                return true;                    
            }
            else cAddress.moveToNext();
        }
    }
    cAddress.close();
    return false;
}

Результат:

Человек: Джон

Это совпадение! null

На самом деле, «Это матч! Джон»

Пожалуйста, проверьте мою ошибку.

0
ответ дан 24 November 2019 в 18:17
поделиться

Java не поддерживает параметры вывода. Вы можете использовать возвращаемое значение или передать объект в качестве параметра и изменить объект.

6
ответ дан 24 November 2019 в 18:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: