【发布时间】:2021-09-17 06:11:14
【问题描述】:
我知道我可以在 Java 中对 ArrayList 调用 Collections.sort(),但我目前正在尝试重载构造函数,而在第二个构造函数中我想调用第一个构造函数。但是,我想将排序列表作为参数之一传递,但 Java 不允许我在对列表排序后调用 this() - 它要求 this() 是第一行。我可以将Collections.sort(myList) 放在构造函数中,但我不知道这个方法是否返回排序列表,但理想情况下我想返回排序列表而不改变原始列表。
这是我的代码(适用于您在学校或大学中找到的一段时间),包括错误:
public class Period {
private String name;
private LocalDateTime start;
// duration in seconds
private int duration;
private Lecturer lecturer;
private ArrayList<Demonstrator> dems;
private ArrayList<Skill> skills;
public Period(String name, LocalDateTime start, int duration, Lecturer lecturer) {
this.name = name;
this.start = start;
this.duration = duration;
this.lecturer = lecturer;
this.dems = new ArrayList<>();
this.skills = new ArrayList<>();
}
public Period(String name, ArrayList<AvailBlock> blocks, Lecturer lecturer) {
// this line is illegal, but shows you what I'm trying to do.
Collections.sort(blocks);
this(name, blocks.get(0).getStart(), ( blocks.size() * AvailBlock.LENGTH ), lecturer);
}
...
}
AvailBlock 类具有作为LocalDateTime 对象的开始时间和固定的持续时间(当前为 15 分钟)。我正在尝试创建一个持续时间以秒为单位的周期,或者只是传入AvailBlock 对象列表并让它确定周期何时开始以及应该多长时间。
这是AvailBlock 类的开头:
public class AvailBlock implements Comparable {
// the start time of the slot
private LocalDateTime start;
// Length of slots in seconds
public static final int LENGTH = 900;
public AvailBlock(LocalDateTime start) {
this.start = start;
}
...
}
【问题讨论】:
-
如果您发现自己在构造函数中做着重要的工作,您可以考虑将其改为静态工厂方法。通常,当我调用构造函数时,我希望它只是分配一些字段,进行一些基本的错误检查,以及将类的工作实例返回给我所需的绝对最少的工作量。
-
谢谢。我已经创建了第三个构造函数,但它看起来有点乱 - 我会研究静态工厂方法,因为我不熟悉它。
-
@SilvioMayolo “创建此对象列表的托管、排序副本”对于某些管理器对象来说是一项非常普通的任务。
标签: java sorting arraylist overloading