Как использовать выходной параметр в Java?
может кто-нибудь дать мне пример кода, который использует выходной параметр в функции? Я пытался гуглить, но нашел его только в функциях. Я хочу использовать это значение в другой функции.
код, который я разрабатываю, предназначен для запуска в Android.
7 ответов:
Java не поддерживает выходные параметры. Можно использовать возвращаемое значение или передать объект в качестве параметра и изменить объект.
в качестве обходного пути можно использовать общий "ObjectHolder". См. пример кода ниже.
пример вывода:
name: John Doe dob:1953-12-17 name: Jim Miller dob:1947-04-18
таким образом, параметр Person был изменен, так как он завернут в держатель, который передается по значению - общий параметр внутри является ссылкой, где содержимое может быть изменено - так что фактически возвращается другой человек, а оригинал остается как есть.
/** * show work around for missing call by reference in java */ public class OutparamTest { /** * a test class to be used as parameter */ public static class Person { public String name; public String dob; public void show() { System.out.println("name: "+name+"\ndob:"+dob); } } /** * ObjectHolder (Generic ParameterWrapper) */ public static class ObjectHolder<T> { public ObjectHolder(T param) { this.param=param; } public T param; } /** * ObjectHolder is substitute for missing "out" parameter */ public static void setPersonData(ObjectHolder<Person> personHolder,String name,String dob) { // Holder needs to be dereferenced to get access to content personHolder.param=new Person(); personHolder.param.name=name; personHolder.param.dob=dob; } /** * show how it works */ public static void main(String args[]) { Person jim=new Person(); jim.name="Jim Miller"; jim.dob="1947-04-18"; ObjectHolder<Person> testPersonHolder=new ObjectHolder(jim); // modify the testPersonHolder person content by actually creating and returning // a new Person in the "out parameter" setPersonData(testPersonHolder,"John Doe","1953-12-17"); testPersonHolder.param.show(); jim.show(); } }
вы можете использовать:
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.
оберните значение, переданное в разных классах, которые могут быть полезны для выполнения трюка, проверьте ниже для более реального примера:
class Ref<T>{ T s; public void set(T value){ s = value; } public T get(){ return s; } public Ref(T value) { s = value; } } class Out<T>{ T s; public void set(T value){ s = value; } public T get(){ return s; } public Out() { } } public static void doAndChangeRefs (Ref<String> str, Ref<Integer> i, Out<String> str2){ //refs passed .. set value str.set("def"); i.set(10); //out param passed as null .. instantiate and set str2 = new Out<String>(); str2.set("hello world"); } public static void main(String args[]) { Ref<Integer> iRef = new Ref<Integer>(11); Out<String> strOut = null; doAndChangeRefs(new Ref<String>("test"), iRef, strOut); System.out.println(iRef.get()); System.out.println(strOut.get()); }
Это не точно ---> "...* пройти массив. массивы передаются по ссылке. т. е. если вы передаете массив целых чисел, измените массив внутри метода.
каждый тип параметра передается по значению в Java. Массивы объекта, его ссылка на объект передается по значению.
Это включает в себя массив примитивов (int, double,..) и объекты. Целое число стоимостью изменена операция methodtwo (), но это все равно один и тот же объект Арр ссылку, операция methodtwo() невозможно добавить или удалить элемент массива. methodTwo () также не может создать новый массив, а затем установить этот новый массив в arr. Если вы действительно можете передать массив по ссылке, вы можете заменить этот arr совершенно новым массивом целых чисел.
каждый объект, передаваемый в качестве параметра в Java, передается по значению, без исключений.
спасибо. Я использую передачу объекта в качестве параметра. Мой 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
на самом деле, "это матч! Джон"
пожалуйста, проверьте свою ошибку.