我正在尝试创建一个计数器,该计数器在达到预设上限时会翻转,并在达到所述上限时重置回其底值。我已经实现了这个类,它工作得很好。但是,在寻找解决方案的过程中,我想尝试使用 Java 泛型。我想尝试扩展我的计数器,使其不仅使用整数,而且可以使用任何类型的数字。我知道计数器通常只需要使用整数,但我想看看是否可以这样做。
我认为代码将类似于下面。但是,java.lang.Number 没有获取/设置其值的“通用”方式。我需要创建自己的号码类来启用它吗?另外,我知道如果我确实让这个工作,我需要改变我的等号检查,以便它们对浮点值有一个错误阈值,这或多或少是我的 int 计数器的修改版本,我认为它适用于仿制药。
编辑: 有人建议我采用映射方法,存储一个整数计数器并保持一个增量值,这样当我想吐出一个数字时,我只需将当前计数乘以增量值。但是,我不相信这会满足我的确切需求,因为我不想每次都增加相同的数量。这个计数器的主要焦点更多地是一种具有固定范围数字的方法,当添加或减去该数字时,它知道如何处理回绕。
我想描述它的最佳方式(尽管可能不正确)就像Integer
自动处理上溢/下溢。
package com.math;
public class GenericRolloverCounter<T extends Number> {
private T value;
private T lowValue;
private T highValue;
public GenericRolloverCounter(T l_startValue, T l_highValue) {
this.lowValue = l_startValue;
this.highValue = l_highValue;
this.value = l_startValue;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
public void increment(T valToIncrementBy) {
this.value += valToIncrementBy;
if (this.value > this.highValue) {
this.value = (this.lowValue + (this.value - (this.highValue + 1)));
}
}
public void increment() {
this.increment(1);
}
public void decrement(T valToDecrementBy) {
this.value -= valToDecrementBy;
if (this.value < this.lowValue) {
this.value = ((this.value + this.highValue + 1) - this.lowValue);
}
}
public void decrement() {
this.decrement(1);
}
@Override
public String toString() {
return Integer.toString(this.value);
}
}