gpt4 book ai didi

java - 具有默认值的抽象类

转载 作者:太空狗 更新时间:2023-10-29 22:39:27 28 4
gpt4 key购买 nike

我正在尝试定义一个抽象范围类,它将作为许多范围类的基本实现。预期用途与这个问题无关,但到目前为止我有:

/**
* Abstract generic utility class for handling ranges
*/
public abstract class Range<T extends Number> {

// 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;
}
}

现在我想添加一个只接受startstop 的构造函数,并将默认步长值设置为1,无论Number T 的实现是什么(例如,如果 TInteger [one]将具有值 1,如果 TLong [one] 将具有值 1L 等)。我想要这样的东西:

protected Range(T start, T stop) {
this(start, stop, [one]);
}

但我不知道如何设置[one] 的值。由于 Java 对我来说还很陌生,我尝试过:

private static final T one = 1;

这不起作用,因为 T 显然是在 Range.this 的实例化中定义的。我也试过:

protected static abstract T getOne();

这也不起作用,因为 T 是在 Range.this 加上 staticabstract 不要一起工作。

我需要一些方法来强制扩展类来定义 [one] 的值,无论 Number Range 的实现是什么实现。

最终我还想设置一个零值作为默认开始,这样我就得到一个如下所示的构造函数:

protected Range(T stop) {
this([zero], stop, [one]);
}

最佳答案

一个解决方案是要求子类使用默认步骤:

public abstract class Range<T extends Number> {

private T start;
private T stop;
private T step;

public Range(T start, T stop, T step) {
this.start = start;
this.stop = stop;
this.step = step;
}

protected Range(T start, T stop) {
this.start = start;
this.stop = stop;
this.step = getDefaultStep();
}

protected abstract T getDefaultStep();

}

public class IntegerRange extends Range<Integer> {

public IntegerRange(Integer start, Integer stop, Integer step) {
super(start, stop, step);
}

public IntegerRange(Integer start, Integer stop) {
super(start, stop);
}

@Override
protected Integer getDefaultStep() {
return 1;
}

}

public class DoubleRange extends Range<Double> {

public DoubleRange(Double start, Double stop, Double step) {
super(start, stop, step);
}

public DoubleRange(Double start, Double stop) {
super(start, stop);
}

@Override
protected Double getDefaultStep() {
return 1d;
}

}

关于java - 具有默认值的抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23826149/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com