我的代码中有一个名为jobsList的静态arrayList。我想使用静态方法向其添加元素。由于某种原因,它覆盖了jobList,因此每次添加元素时,第一个元素都是我刚刚添加的元素而没有其他内容。如同,没有添加任何其他元素。相关代码如下:
public static ArrayList<Job> jobList = null;
public JobSchedule() {
jobList = new ArrayList<Job>(10);
}
public static Job addJob(int time) {
System.out.println("Adding job " + time);
Job j = new Job(time);
jobList.add(j);
System.out.println("Current joblist size: " + jobList.size());
System.out.println("First element: " + jobList.get(0).weight);
return j;
}
printlines的输出如下所示:
Adding job 8
Current joblist size: 1
First element: 8
Adding job 5
Current joblist size: 1
First element: 5
理想情况下,每次添加它都会增加大小并将作业放在正确的索引处,所以我不确定为什么会覆盖arraylist。
答案 0 :(得分:3)
我认为你每次都在调用构造函数,
logcat
每次调用它时都会创建一个新的ArrayList。
不需要构造函数。做这样的事情:
JobSchedule(){
jobList = new ArrayList<Job>(10);
}
答案 1 :(得分:1)
在当前代码中,当您调用构造函数new JobSchedule()
时,将创建一个全新的ArrayList对象并分配给相同的引用。
事实上,我建议您使用jobList
,private
和static
标记final
引用变量,如下所示:
private static final ArrayList<Job> jobList = new ArrayList<Job>(10);
public JobSchedule() {
}
public static Job addJob(int time) {
System.out.println("Adding job " + time);
Job j = new Job(time);
jobList.add(j);
System.out.println("Current joblist size: " + jobList.size());
System.out.println("First element: " + jobList.get(0).weight);
return j;
}
private
- 可以在同一个班级中访问
static
- 维护整个班级的单一副本
final
- 无法使用新的arraylist
不建议将整个jobList (arraylist)
公开为public
变量,而是尝试使用某种Job
方法获取特定的getJob(T t)
(原因是我将其标记为private
)。
答案 2 :(得分:0)
最可能的原因是,在调用addJob(5)
之前,您正在调用构造函数JobSchedule()
,它会覆盖静态列表。
要解决此问题,请避免在实例方法中初始化静态变量
public static ArrayList<Job> jobList = new ArrayList<Job>(10);
public JobSchedule() {
}
代码应该按预期工作。或者,使jobList
字段和addJob
方法都是非静态的。在调用addJob
答案 3 :(得分:0)
感谢您的帮助。我最后重写了我的代码,以便它需要一个空的构造函数,并使子类只是一个普通的嵌套类,在nestedclass对象中传入一个超类的实例,然后能够在其上调用sort()。 p>
public JobSchedule() {}
public Job addJob(int time) {
Job j = new Job(time, this);
jobList.add(j);
return j;
}
Nested class...{
public JobSchedule schedule = null;
private Job(int time, JobSchedule schedule)
{
this.schedule = schedule;
this.weight = time;
}
public int getStartTime() {
schedule.kahnSort();
.
.
.
}
答案 4 :(得分:0)
我认为每次在新的JobSchedule对象之前添加元素。不要在构造函数
中实例化静态ArrayList