如何在Java中创建IN OUT或OUT参数

Luk*_*der 9 java language-agnostic parameters out-parameters

在PL/SQL(或许多其他语言)中,我可以使用IN OUT或OUT参数,这些参数是从过程返回的.如何在Java中实现类似的功能?

我知道这个伎俩:

public void method(String in, String[] inOut, String[] inOut2) {
  inOut[0] = in;
}
Run Code Online (Sandbox Code Playgroud)

其中in参数表示IN参数,inOut参数可以包含返回值.惯例将String[] inOut是一个数组inOut.length == 1.

那有点笨拙.

编辑反馈答案:其他技巧包括:

  • holder/wrapper类,但我不想引入任何新类型,回调等.
  • 返回值:我想要一个通用的解决方案.即一个涉及几个IN OUT参数.
  • IN OUT参数的包装器作为返回值:这是一个可行的选项,但仍然不太好,因为必须以某种方式生成包装器

有没有人知道更好的方法来实现这一目标?我需要一般解决方案的原因是因为我想在数据库模式中从PL/SQL生成便利源代码.

T.J*_*der 10

我的问题是:为什么不method 归还某些东西?而不是设置输入/输出参数?

但是假设你绝对,肯定必须有一个输入/输出参数,这是一个完全不同的问题,那么数组技巧就可以了.或者,它并没有那么笨拙,但另一种方法是传入一个对象引用:

public class Foo {
    private String value;

    public Foo(String v) {
        this.value = v;
    }

    public String getValue() {
        return this.value;
    }

    public void setValue(String v) {
        this.value = v;
    }
 }

 // ....
 public void method(String in, Foo inOut) {
     inOut.setValue(in);
 }
Run Code Online (Sandbox Code Playgroud)

(或者,当然,只是value公开.)看?我说它并没有那么笨拙.

但是我再问一次:不能method回复什么?如果它需要返回多个东西,它不能返回具有这些东西属性的对象实例吗?

偏离主题:这是我非常喜欢C#方法的领域之一.反对输入/输出参数的一个论点是它们在你调用函数的时候还不清楚.因此,通过在函数声明调用它时指定关键字,C#可以使它变得清晰.在没有那种语法帮助的情况下,我会避免"模拟"输入/输出参数.