将变量声明为静态:意外行为

时间:2016-03-09 10:32:56

标签: java arraylist static spring-data

我正在开发一个使用Java Spring的{​​{1}}项目。

当狗被其拥有者收集时,它使用Spring data从狗窝对象中删除狗对象。

请注意,可能存在与一个狗窝相关联的多个狗。还有很多狗窝。

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

E.g:

Static

删除方法:

static Kennel kennel;

dogsWithReleasedStatus;

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

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

在main中调用remove方法:

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

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--;


            }
        }
    }

我遇到的问题是,当调用 save 方法时,它会删除 ALL 狗窝中的狗,而不仅仅是那些发布的狗“状态。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

  

请注意,可能有多只狗与一只犬舍相关联。还有很多狗窝。

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

从根本上说,你需要弄清楚哪个信息是针对个别狗窝的(例如其中的狗) - 而那些字段是静态的。

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

我还会强烈建议你放弃Spring,数据库等,然后再继续尝试语言的基础知识。