Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在类构造函数内实例化ArrayList_Java_Arraylist - Fatal编程技术网

Java 在类构造函数内实例化ArrayList

Java 在类构造函数内实例化ArrayList,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. n

我的课程如下:

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;
    }
}
package com.aci.golfgames;
导入java.util.ArrayList;
公共课{
私有字符串名称;
私人国际午餐;
私人ArrayList T恤;
公共课程(){
//用一些球座建一个球场。
name=“ABC乡村俱乐部”;
ArrayList三通=新的ArrayList();
增加三通(新三通(“白色”,126,70.4));
增加三通(新三通(“红色”,128,75.2));
增加三通(新三通(“蓝色”,126,71.4));
nooftes=3;
}
公共字符串getCourseName(){
返回此.name;
}
公共数组列表getTees(){
返回三通;
}
公共int GetNooftes(){
返回此.nooftes;
}
}
当我试图实例化ArrayList字段T时,似乎我创建的ArrayList与在对象过程中声明为字段的ArrayList不同。瞧,这个。球座和球座不同。如果我删除该行:

            ArrayList<Tee> tees = new ArrayList<Tee>();
ArrayList三通=新的ArrayList();
在运行时,我在tees.add(…)上得到一个空指针异常,我假设这是因为ArrayList尚未实例化

这里怎么了?如何实例化ArrayList?注意:tees ArrayList中的条目数会随着对象的不同而变化,因此ArrayList而不仅仅是一个数组。这里的代码只是为了定义一个测试过程

谢谢。

公共课程(){
public Course(){
    ArrayList<Tee> tees = new ArrayList<Tee>();
}
ArrayList三通=新的ArrayList(); }
应该是

public Course(){
    tees = new ArrayList<Tee>();
}
公共课程(){
tees=新的ArrayList();
}
通过在构造函数中再次将其定义为
ArrayList
,您将构造函数中
tee
的范围缩小为仅限于构造函数,而其他方法则使用在实例范围中定义为字段的
tee

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

public Course(){
ArrayList三通=新的ArrayList();
}
应该是

public Course(){
    tees = new ArrayList<Tee>();
}
公共课程(){
tees=新的ArrayList();
}
通过在构造函数中再次将其定义为
ArrayList
,您将构造函数中
tee
的范围缩小为仅限于构造函数,而其他方法则使用在实例范围中定义为字段的
tee


因此,是的,它实际上将创建一个新列表,该列表将在构造函数内部使用。

是;您正在构造函数内部创建一个局部作用域的
ArrayList
,该构造函数将外部
tee
隐藏起来。您需要执行以下操作:

tees = new ArrayList<Tee>();
tees=newarraylist();
也就是说,去掉前面的
ArrayList


也考虑使用接口<代码>列表>代码>代替<代码> ARAYLIST/<代码>类型<代码> TE/<代码>;这将便于您以后交换实现,因为您没有紧密地耦合到

ArrayList

Yes;您正在构造函数内部创建一个局部作用域的
ArrayList
,该构造函数将外部
tee
隐藏起来。您需要执行以下操作:

tees = new ArrayList<Tee>();
tees=newarraylist();
也就是说,去掉前面的
ArrayList


也考虑使用接口<代码>列表>代码>代替<代码> ARAYLIST/<代码>类型<代码> TE/<代码>;这将便于您以后交换实现,因为您没有与

ArrayList

紧密耦合。感谢您的快速响应。感谢您的快速响应。