【问题标题】:How do I add an arraylist to the constructor?如何将数组列表添加到构造函数?
【发布时间】:2021-06-15 05:01:20
【问题描述】:

我想向构造函数添加一个数组列表,以便我创建的每个对象都有自己的 ArrayList 但是我不知道该怎么做,并且可以真正使用帮助。这就是我目前所拥有的

    private ArrayList<String> Requirements;

    public Module(int ModuleCode, String module_name, double Credit, int Weeks,ArrayList<String> Requirements) {
        this.ModuleCode = ModuleCode;
        this.module_name = module_name;
        this.Credit = Credit;
        this.Weeks = Weeks;
        this.Requirements = Requirements;

    }

【问题讨论】:

  • 你已经完成了你说你想做的事——那么问题是什么?它真的需要ArrayList - 通常更好地分离关注点 - 即,如果你不需要它成为ArrayList 则让它成为List&lt;String&gt; (或者任何仍然满足你需求的最普遍的东西) - 因为这让调用者提供他们拥有的列表或他们知道需要锁定的列表..
  • 目前尚不清楚问题出在哪里,但除了偏离变量名应以大写字母开头的约定外,您在此处显示的代码看起来可能符合您的要求。
  • 也许您应该确定是否要为您的需求字段分配链接或拥有参数的独立克隆。
  • 如果您使用标准的 Java 命名约定,您的生活将会轻松很多。变量名以小写字母开头,使用camelCasemoduleCodemoduleName.

标签: java class variables arraylist constructor


【解决方案1】:

通常在 Java 和一般的 OOP 中,列表表示 1-N 关系(通常是聚合/组合)。

主要有两种方法:

  • 您现在正在使用的那个,将数组列表作为参数发送,通常这不是很干净,因为您必须在其他地方创建您的数组列表

  • 在构造函数中实例化一个空列表,然后在你的类中添加一个void AddRequirement(Requirement) 方法来一一填充该列表的元素。

您的代码如下:

 private ArrayList<String> requirements;

    public Module(int moduleCode, String module_name, double credit, int weeks) {
        this.moduleCode = moduleCode;
        this.module_name = module_name;
        this.credit = credit;
        this.weeks = weeks;
        this.requirements = new ArrayList<>(); // the object Instanciates its own list 

    }

    public void addRequirement(String requirement) {
       this.requirements.add(requirement);
    }

大体上,您将一一添加需求

public static void main(String[] args) {
    Module module = new Module("m1", "module_1", 3, 7);
    module.addRequirement("requirement1");
    module.addRequirement("requirement2");
    module.addRequirement("requirement3");
}

这是最简洁的解决方案,应该适用于任何时候你有一个列表。当然,您可以为特殊情况的整个列表添加一个 setter。

希望这能回答问题。

编辑:PS:顺便说一下,在命名变量时请使用驼峰式命名(变量应该以小写开头),在Java中遵循这个约定非常重要。

【讨论】:

  • 感谢您的建议和帮助,我会尝试一下!
  • 我试过这个,但是当我打印出对象时,对象中没有列表
  • 你需要用其他对象的数据显式地打印出列表项,比如遍历 module.getRequirements() 列表并打印每个项
猜你喜欢
  • 2015-06-12
  • 2013-11-28
  • 2019-09-06
  • 2018-03-19
  • 2014-09-18
  • 1970-01-01
  • 2021-11-24
  • 2014-04-22
  • 2021-01-24
相关资源
最近更新 更多