gpt4 book ai didi

java - 静态方法改变对象的状态

转载 作者:行者123 更新时间:2023-12-01 18:30:13 25 4
gpt4 key购买 nike

今天,我偶然发现了我在项目中看到的一段代码,并且很担心对其进行研究。我不明白为什么他们将这些方法设为静态方法,因为它们会改变其中对象的状态。

下面是代码

@Controller
CruiseController{

getCruiseSearchResults(){
//prepare cruise serach request, static method in CruiseHelper
CruiseSearchRequest cruiseReq = CruiseHelper.prepareRequest();
...futher impl

}

/** my helper class which has utlity methods */
CruiseHelper{
public static CruiseSearchRequest prepareRequest(){
CruiseSearchRequest cruiseRequest = new CruiseSearchRequest();

// all below methods are static
setCruiseTypeandDestination(cruiseRequest)
setStartAndEndDate(cruiseRequest)
setShipAndDeparturePort(cruiseRequest)
setDurationAndAccesiblity(cruiseRequest)
setPromoType(cruiseRequest)
setResultPreferences(cruiseRequest)

return cruiseSearchCriteriaDTO
}

static void setCruiseTypeandDestination(CruiseSearchRequest cruiseRequest){

/** changing the state of object in static method */
cruiseRequest.setCruiseType("ABC");
cruiseRequest.setCruiseType("Alaska");
}

//.... further static methods as above, all of them
//change the state of cruiseRequest
}

所以我知道,上述方法不应该是静态的,因为它们都具有每个请求的属性。但代码正在运行,并且在执行的任何负载测试中都没有失败。

我的重要问题是:“可以考虑上面的代码吗??”以及“如果会失败,那么在什么情况下会失败?”

最佳答案

确实,这些方法会更改对象的状态,但它是作为参数提供给它们的对象,这是完全有效且有意义的。

static 意味着该方法绑定(bind)到对象定义(类),而不是任何特定的对象实例。因此,静态方法无法更改其自身对象的状态,因为它根本没有可以使用的实例(它没有this)。

我建议您阅读有关静态和类变量的文章:Understanding Class Members

关于java - 静态方法改变对象的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24531238/

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