java - 在类构造函数中实例化 ArrayList

标签 java arraylist

我有一个类如下:

package com.aci.golfgames;

import java.util.ArrayList;

public class Course {
    private String name;
    private int noOfTees;
    private ArrayList<Tee> tees;

    public Course(){
        // Build a course with some tees.
        name = "ABC Country Club";
        ArrayList<Tee> tees = new ArrayList<Tee>();
        tees.add(new Tee("White", 126, 70.4));
        tees.add(new Tee("Red", 128, 75.2));
        tees.add(new Tee("Blue", 126, 71.4));
        noOfTees = 3;
    }

    public String getCourseName(){
        return this.name;
    }
    public ArrayList<Tee> getTees(){
        return tees;
    }
    public int getNoOfTees(){
        return this.noOfTees;
    }
}

当我尝试实例化 ArrayList 字段 tees 时,我创建的 ArrayList 似乎与对象 Course 中声明为字段的 ArrayList 不同。 IOW,this.tees 不同于 tees。如果我删除该行:

            ArrayList<Tee> tees = new ArrayList<Tee>();

我在 tees.add(...) 处在运行时遇到空指针异常,我假设是因为 ArrayList 尚未实例化。

这是怎么回事?如何实例化 ArrayList?注意:tees ArrayList 中的条目数会因对象而异,因此 ArrayList 而不仅仅是数组。这里的代码只是定义了一个Course用于测试。

谢谢。

最佳答案

public Course(){
    ArrayList<Tee> tees = new ArrayList<Tee>();
}

应该是

public Course(){
    tees = new ArrayList<Tee>();
}

通过将其定义为 ArrayList<Tee>再次在构造函数中,您正在缩小 tees 的范围仅在构造函数中使用构造函数,而其他方法使用 tees定义为实例范围内的字段。

是的,它实际上会创建一个将在构造函数中使用的新列表。

关于java - 在类构造函数中实例化 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19844907/

相关文章:

java - JLabel 有问题

java - 如何在Spring中使用WebLogic 12.2.1提供的JNDI DataSource?

java - Spring AOP 可以实现通用返回类型

java - 当我从另一个 Activity 中删除元素时,如何清除一个 Activity 的数组列表?

java - 从 HashMap 返回 ArrayList

JavaFX - 将节点添加到父级时的奇怪行为

java - 使用 Java 进行硬盘基准测试,获得异常快的结果

Java 泛型与列表

Java ArrayList 初始化

java - 如何访问数组的元素并且该数组是 ArrayList 的元素?