【问题标题】:Adding a constructor's properties to an ArrayList?将构造函数的属性添加到 ArrayList?
【发布时间】:2016-12-03 07:05:57
【问题描述】:

我正在尝试将已在构造函数中定义的 Person 添加到 ArrayList 中,以便我可以调用另一个类中的方法。但是,我在将 Person 添加到 ArrayList 时遇到问题。这是我目前所拥有的:

GrownUp 课程更新

public class GrownUp extends Person
{
    ArrayList<Person> people;



GrownUp(int age, String name)  
{
    super(age, name);
    this.people = new ArrayList<>();        
    name = "Bill";
    age = 36;        
}  

public ArrayList<Person> getGrownUp()
{
   return people;
}

public void setGrownUp(int age, String name)
{
    //how to add a GrownUp? 
}

那么需要做的是:

  • 将被定义为 36 岁“Bill”的 Person 添加到 ArrayList people

感谢您的帮助。

我之前问过一个与此类似的问题,但我并不清楚我在问什么,所以我改变了我的问题,希望它对我想要实现的目标更有意义。我添加了一个 get 方法,但我不知道如何执行 set 方法。我如何将Person 构造函数与 ArrayList 关联起来以将人员添加到其中?

【问题讨论】:

    标签: java arraylist multiple-inheritance


    【解决方案1】:

    我认为在 GrownUp 类中包含 people 数组有点奇怪。尝试将其映射到现实世界。让人们在 GrownUp 中有意义吗?我宁愿把那个数组放在外面,然后这样做:

    List<People> people = new ArrayList<>();
    people.add(new GrownUp(25, "Alice"));
    people.add(new GrownUp(36, "Bill"));
    people.add(new Child(5, "Nina"));
    

    GrownUp 类将如下所示:

    public class GrownUp extends Person {
    
        public GrownUp(int age, String name) {
            super(age, name)
        }
    }
    

    我猜您正计划添加更多特定于 GrownUp 类的属性,例如 Optional&lt;DriversLicense&gt; getDriversLicense() 或类似的。

    【讨论】:

    • 感谢您的反馈,如果我要说调用该 GrownUp 上的方法,如果该方法被称为 eat(),我该怎么做?
    • 如果所有人(包括儿童)都要吃饭:people.stream().foreach(person -&gt; person.eat()); 如果只是大人吃饭:people.stream().filter(person -&gt; person instanceof GrownUp.class).foreach(grownUp -&gt; grownUp.eat());
    • 获取所有driversLicences。 List&lt;DriversLicense&gt; driversLicenses = people.stream().filter(person -&gt; person instanceof GrownUp.class).foreach(grownUp -&gt; ((GrownUp) grownUp).getDriversLicense()).collect(Collectors.toList());
    • 这里看起来有点乱,但如果你在点之前换行,它应该看起来更好。当然,您也可以使用传统的 for 循环而不是流 API。
    【解决方案2】:

    这应该对你有帮助。

    public void setGrownUp(int age, String name)
    {
    people.add(new GrownUp(age,name));
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-09
      • 2020-07-01
      • 2021-05-16
      • 2013-10-27
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      相关资源
      最近更新 更多