首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中使用输出参数?

如何在Java中使用输出参数?
EN

Stack Overflow用户
提问于 2010-05-13 14:51:41
回答 3查看 142.3K关注 0票数 64

有人能给我一些在函数中使用输出参数的示例代码吗?我试着用谷歌搜索它,但只是在函数中找到了它。我想在另一个函数中使用这个输出值。

我正在开发的代码打算在Android上运行。

EN

回答 3

Stack Overflow用户

发布于 2010-05-13 14:54:51

Java不支持输出参数。您可以使用返回值,或者将对象作为参数传入并修改该对象。

票数 8
EN

Stack Overflow用户

发布于 2012-12-17 19:53:28

作为一种解决办法,可以使用通用的"ObjectHolder“。请参阅下面的代码示例。

示例输出为:

代码语言:javascript
复制
name: John Doe
dob:1953-12-17
name: Jim Miller
dob:1947-04-18

因此Person参数已经被修改,因为它被包装在通过值传递的Holder中-里面的泛型参数是一个可以修改内容的引用-所以实际上返回了一个不同的person,原始的保持原样。

代码语言:javascript
复制
/**
 * 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();
  }
}
票数 5
EN

Stack Overflow用户

发布于 2015-12-03 04:49:55

将传递到不同类中的值包装在不同的类中,这可能会对实现此技巧有所帮助,请查看下面的更多真实示例:

代码语言:javascript
复制
  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());

    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2824910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档