[英]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[] inOut
是inOut.length == 1
的數組。
那有點笨拙。
編輯反饋答案 :其他技巧包括:
有誰知道更好的方法來實現這一點? 我需要一般解決方案的原因是因為我想在數據庫模式中從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?
沒有直接的方法。 其他技術包括:
如果你考慮一下,數組技巧與在C / C ++中傳遞T *沒有什么不同
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.