gpt4 book ai didi

java - 这个 Holder<> 在 Java 中做什么?

转载 作者:搜寻专家 更新时间:2023-10-31 19:38:28 27 4
gpt4 key购买 nike

有人可以解释这段代码吗?

public void getSupplierByZipCode(
@WebParam(name = "zip", targetNamespace = "http://www.webservicex.net/")
String zip,
@WebParam(name = "GetSupplierByZipCodeResult", targetNamespace = "http://www.webservicex.net/", mode = WebParam.Mode.OUT)
Holder<Boolean> getSupplierByZipCodeResult,
@WebParam(name = "SupplierDataLists", targetNamespace = "http://www.webservicex.net/", mode = WebParam.Mode.OUT)
Holder<SupplierDataList> supplierDataLists);

我从未见过Holder之前在 Java 中。什么是Holder<Boolean>Holder<SupplierDataList>在函数中?它们像输出吗??我需要此功能的供应商数据列表。

最佳答案

参见 Holder - 整个目的是“保持一个值”同时允许对其自身进行副作用修改(从而改变它“保持”的值)。

实例变量()表示包含/“保存”的值可以重新赋值;这用于促进如何在 WS 中“返回”[多个] 值 - 通过显式修改作为参数提供的持有者。 (还要注意 WebParam.Mode.OUT 的用法。)

这个“额外层”是必需的,因为 Java 总是 Call By Value ;然后 Holder 有效地伪造了一个指针间接(让我们称之为“引用间接”),就像在 C 中可能做的那样,这导致 Call By (Object) Sharing。语义。

想象一下:

// Outside WS function - setup parameters and invoke
String zip = "98682";
Holder<Boolean> result = new Holder<Boolean>();
getSupplierByZipCode(zip, result, ..);

// Then inside the function the Holder is modified and a new value
// is assigned to it's value member.
getSupplierByZipCodeResult.value = true;

// And outside again, the mutations are visibile still
if (result.value) {
// Yay!
}

由于字符串是不可变的并且 zip 文件没有包裹在 Holder 中,因此 WS 调用无法更改(或“返回”)邮政编码。

另见:

关于java - 这个 Holder<> 在 Java 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25777793/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com