我试图定义一个抽象的Range类,它将作为一些范围类的基本实现.预期用途与这个问题无关,但到目前为止我有:
/**
* Abstract generic utility class for handling ranges
*/
public abstract class Range {
// Variables to hold the range configuration
private T start;
private T stop;
private T step;
/**
* Constructs a range by defining it's limits and step size.
*
* @param start The beginning of the range.
* @param stop The end of the range.
* @param step The stepping
*/
public Range(T start, T stop, T step) {
this.start = start;
this.stop = stop;
this.step = step;
}
}
现在我想添加一个只有启动和停止的构造函数,并且设置默认步长值为1,不管Number T的实现是什么(例如,如果T是Integer [1]将具有值1,并且如果T是Long [1]将具有值1L,依此类推).我想要像:
protected Range(T start, T stop) {
this(start, stop, [one]);
}
但我不知道如何设定[一]的价值.由于Java对我来说还是比较新的,所以我试过:
private static final T one = 1;
这不起作用,因为T在Range.this的实例化中被明确定义.我也尝试过:
protected static abstract T getOne();
这也不起作用,因为T在Range的实例化中定义.这个加上静态和抽象不能一起工作.
我需要一些方法来扩展类被强制定义[1]的值,无论实现“数量范围”的实现.
最终我还想设置一个零值作为默认开始,这样我得到一个如下所示的构造函数:
protected Range(T stop) {
this([zero], stop, [one]);
}