Кто-то мог дать мне некоторый пример кода, который использует выходной параметр в функции? Я попробовал к Google его, но просто нашел его только в функциях. Я хотел бы использовать это выходное значение в другой функции.
Код я разрабатываю предназначенный, чтобы быть выполненным в Android.
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
неизменяемые поля не общедоступными
], а взамен используйте общедоступные
геттеры.
Вы можете использовать:
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.
Спасибо. Я использую передачу объекта в качестве параметра. Мой код 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
На самом деле, «Это матч! Джон»
Пожалуйста, проверьте мою ошибку.
Java не поддерживает параметры вывода. Вы можете использовать возвращаемое значение или передать объект в качестве параметра и изменить объект.