gpt4 book ai didi

java - 将变量声明为静态 : Unexpected behaviour

转载 作者:行者123 更新时间:2023-11-29 04:49:37 29 4
gpt4 key购买 nike

我正在开发一个使用 Spring 数据Java Spring 项目。

它使用 repositories 在狗被主人收集时从 Kennel Object 中移除 Dog Objects。

请注意,一个犬舍可以关联多条狗。还有很多狗窝。

我已将所有变量和方法声明为Static

例如:

static Kennel kennel;

dogsWithReleasedStatus;

static List<Dog> dogsWithReleasedStatus = new ArrayList<Dog>();

static List<Dog> allDogsInKennel = new ArrayList<Dog>();

删除方法:

public static void removeDogFromKennel(int dogInKennel, List<Dog> allDogsInKennel) {
//Loop through all dogs in the Kennel
for (dogInKennel = 0; dogInKennel < allDogsInKennel.size(); dogInKennel++) {

if (allDogsInKennel.get(dogInKennel).getStatus() == dogStatus.RELEASED) {

kennel.removeDog(allDogsInKennel.get(dogInKennel));

dogInKennel--;


}
}
}

在main中调用remove方法:

(注意 getAllKennelIds() 只是返回一个狗窝 ID 列表作为字符串):

List<String> kennelIdsToloopThrough = getAllKennelIds();

for (int i = 0; i < kennelIdsToloopThrough.size(); i++) {

//create list with all dogs in kennels
allDogsInKennel = kennel.getDogsList();

//pass list and remove dog from kennel if status = released
removeDogFromKennel(i,allDogsInKennel);

//save the changes to the DB
kennelRepository.save(kennel);

}

我遇到的问题是,当调用 save 方法时,它会删除 ALL 犬舍中的狗,而不仅仅是那些 “已释放”的狗" 状态。

我做错了什么?

最佳答案

Note that there can be multiple dogs associated with the one Kennel. There are also many kennels.

目前没有与个人犬舍相关联。所有变量都是静态的这一事实意味着它们与 Kennel type 相关联,而不是与该类型的特定 instance 相关联。 p>

从根本上说,您需要弄清楚哪些信息是特定于单个犬舍(例如犬舍中的狗)的 - 这些字段应该是静态的。

您应该阅读 "Understanding Class Members"教程(或一本不错的 Java 书籍)以获取有关静态字段和实例字段之间差异的更多信息。

另外,我强烈建议您放弃 Spring、数据库等,在进一步学习之前先尝试一下该语言的基础知识。

关于java - 将变量声明为静态 : Unexpected behaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35889067/

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