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
紧密耦合。感谢您的快速响应。感谢您的快速响应。