我試圖創建一個計數器,該計數器在達到預設上限時會翻轉,並在達到上限時重置爲其底面值。我已經實現了這個類,它工作得很好。但是,在我的解決方案中,我想試用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);
}
}
你是什麼意思的任何類型的數字?如果你有一個計數器,它在5.54643643,你期望下一個數字是什麼? – Cruncher
我們使用整數來計算事物是有原因的。因爲整數是可數的。沒有「下一個實數」的概念。有一個下一個雙重的概念,但它是相當隨意的,雙打之間的差距不統一。 – Cruncher
@Cruncher作爲孩子,我們都學會「按5計算」,這表明我們並不總是以單一的整數值計算。例如,我們在美國以.01和.05以及.10和.25爲單位計算貨幣,因爲這就是我們的硬幣被分成美元的方式。我認爲它的下一個雙倍的概念不會像增加和減少一個固定數量或一組數量那樣多。 –