簡體   English   中英

如何在Java中創建IN OUT或OUT參數

[英]How to create IN OUT or OUT parameters in Java

在PL / SQL(或許多其他語言)中,我可以使用IN OUT或OUT參數,這些參數是從過程返回的。 如何在Java中實現類似的功能?

我知道這個伎倆:

public void method(String in, String[] inOut, String[] inOut2) {
  inOut[0] = in;
}

其中in參數表示IN參數,而inOut參數可以包含返回值。 慣例是String[] inOutinOut.length == 1的數組。

那有點笨拙。

編輯反饋答案 :其他技巧包括:

  • holder / wrapper類,但我不想引入任何新類型,回調等。
  • 返回值:我想要一個通用的解決方案。 即一個涉及幾個IN OUT參數。
  • IN OUT參數的包裝器作為返回值:這是一個可行的選項,但仍然不太好,因為必須以某種方式生成包裝器

有誰知道更好的方法來實現這一點? 我需要一般解決方案的原因是因為我想在數據庫模式中從PL / SQL生成便利源代碼。

我的問題是:為什么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);
 }

(或者,當然,只是公開value 。)看? 我說它並沒有那么笨拙。

但是我再問一遍:不能用method返回一些東西嗎? 如果它需要返回多個東西,它不能返回具有這些東西屬性的對象實例嗎?

偏離主題:這是我非常喜歡C#方法的領域之一。 反對輸入/輸出參數的一個論點是它們在你調用函數的時候還不清楚。 因此,通過在函數聲明調用它時指定關鍵字,C#可以使它變得清晰。 在沒有那種語法幫助的情況下,我會避免“模擬”輸入/輸出參數。

Java將您傳遞的任何內容復制為參數。 如果傳遞一個原語,在inside方法中你有該原語的副本,並且沒有任何修改會影響實際變量outside方法。 如果傳遞對象,則傳遞引用副本,該副本實際引用原始對象。 這是如何將修改傳播到調用方法的上下文的方式 - 通過修改引用“指向”的對象的狀態。 有關此內容的更多信息: Java Pass by Value還是Reference?

沒有直接的方法。 其他技術包括:

  • 傳遞持有者對象(有點像你的1-ary數組)
  • 使用例如AtomicInteger
  • 從業務角度傳遞更有用的對象,恰好是可變的
  • 回調自定義接口以接收結果

如果你考慮一下,數組技巧與在C / C ++中傳遞T *沒有什么不同

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM