【问题标题】:How to make specific elements static in a non-static ArrayList?如何在非静态 ArrayList 中使特定元素静态?
【发布时间】:2017-02-12 04:45:16
【问题描述】:

有没有办法在非静态 ArrayList 中添加静态元素?

我有我的 Collaborator 类,而这个类有一个 Projects Arraylist。问题是,我的 Project 类有一个编辑项目的方法,但是当我编辑时,它不会更新我创建的协作者中 Project ArrayList 中的元素。

手动更新需要我在我的 Collaborators ArrayList 中运行 Projects Arraylist 来搜索哪些合作者拥有我正在编辑的这个项目。

我在 Main 类中创建了一个静态 Project 对象,当我编辑他时,它似乎可以工作。但是我不能在方法中创建静态对象。

class Collaborator {
String name;
String email;
ArrayList<Project> projects = new ArrayList<>();

我试图将整个 ArrayList 设为静态,但它使我创建的所有新合作者都拥有相同的项目,这是我不希望发生的。

提前致谢。

【问题讨论】:

  • 如果我理解正确:项目实例中的编辑不会反映在列表中的项目实例中?
  • 显示用于将Project 类的实例添加到Collaborator 类中的projects ArrayList 的方法。
  • “我的 Project 类有一个编辑项目的方法,但是当我编辑时,它不会更新元素”。如何调用方法来编辑Project 类的实例?
  • 这个问题听起来像XY Problem。当真正的问题是 Y 时,你认为你需要做 X 来解决一些你没有披露的问题。告诉我们真正的问题是什么。
  • 我建议您在某个地方复制一个项目并编辑该副本,而不是原件?检查您将项目放入数组列表的位置、将它们取出的位置以及编辑它们的位置。如果你使用像 projects.add(new Project(y)) 这样的东西,那么你就是在里面放了一个原始 'y' 项目的副本,当你编辑 'y' 时,副本不会改变。

标签: java arraylist static


【解决方案1】:

我建议您在某个地方复制一个项目并编辑该副本,而不是原件?

检查您将项目放入数组列表的位置、将它们取出的位置以及编辑它们的位置 - 如果您使用类似以下内容:

projects.add(new Project(y))

然后您将原始“y”项目的副本放在那里,当您编辑“y”时,副本不会更改。

【讨论】:

    【解决方案2】:

    如何在非静态 ArrayList 中将特定元素设为静态?

    这是不可能的。

    这甚至没有意义。

    static 关键字仅对变量和方法(以及不同上下文中的类)有意义。而且集合的元素不是变量。

    如果您向我们展示了代码的相关部分,我们或许可以建议您应该做什么。但你目前的做法是(正如他们所说)“找错了树”。


    我的 Project 类有一个编辑项目的方法,但是当我编辑时,它不会更新我创建的协作者中 Project ArrayList 中的元素。

    对此有多种可能的解释。但是我们需要查看代码:

    • 在其中声明和初始化 ArrayList 并将 Project 添加到其中
    • 在哪里调用方法来编辑Project,以及

    • 进行Project编辑的代码(方法?)。

    【讨论】:

    • 能不能显示主要功能?
    • @AbdelmjidELKIHEL - 你在跟我说话吗?
    • 你是对的,这没有意义。我是 Java 的初学者,我想在将对象添加到 ArrayList 时,它会创建一个副本,但它会添加引用,就像指针一样。感谢您的回答。我认为它创建副本的原因是因为我编辑错误,所以它没有更新。但是由于这里的答案,我修复了它。谢谢。
    【解决方案3】:

    我没有完全理解您的问题,但仍在努力帮助您解决问题。

    我有我的 Collaborator 类,而这个类有一个 Projects Arraylist。问题是,我的 Project 类有一个编辑项目的方法,但是当我编辑时,它不会更新我创建的协作者中 Project ArrayList 中的元素。

    如果你做事正确,这是不可能的。假设您想调用 Project 类的方法,该方法对对象的属性进行一些编辑。那么你应该做这样的事情。

    projects.get(i).function_name()
    

    您正在从 projects ArrayList 调用第 i 个 Project 对象的函数,该函数实际上是从 ArrayList 更新对象。

    你的这部分问题,my Project class has a method to edit a project, but when I edit 迫使我怀疑你可能做错了什么。

    编辑意味着,你是在更新一个项目类对象吗?您正在调用哪个对象的方法来更新该对象?展示代码将帮助我们更多地了解您的问题。

    我坚信您不需要将 ArrayList 设为静态,因为您始终可以通过调用 Project 类的所需方法来更新 ArrayList&lt;Project&gt; projects 的成员对象。

    【讨论】:

    • 我做错了什么。我是 Java 的初学者,当我注意到它没有更新时,我想,在将对象添加到 Arraylist 时,它会创建一个副本而不是传递引用。但是我编辑错了。我正在编辑副本而不是编辑正确的对象。感谢您的帮助。
    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多