有人能给我一些在函数中使用输出参数的示例代码吗?我试着用谷歌搜索它,但只是在函数中找到了它。我想在另一个函数中使用这个输出值。
我正在开发的代码打算在Android上运行。
发布于 2010-05-13 14:54:51
Java不支持输出参数。您可以使用返回值,或者将对象作为参数传入并修改该对象。
发布于 2012-12-17 19:53:28
作为一种解决办法,可以使用通用的"ObjectHolder“。请参阅下面的代码示例。
示例输出为:
name: John Doe
dob:1953-12-17
name: Jim Miller
dob:1947-04-18
因此Person参数已经被修改,因为它被包装在通过值传递的Holder中-里面的泛型参数是一个可以修改内容的引用-所以实际上返回了一个不同的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();
}
}
发布于 2015-12-03 04:49:55
将传递到不同类中的值包装在不同的类中,这可能会对实现此技巧有所帮助,请查看下面的更多真实示例:
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());
}
https://stackoverflow.com/questions/2824910
复制相似问题