Ich versuche, eine abstrakte Range-Klasse zu definieren, die als Basisimplementierung einer Reihe von Bereichsklassen dienen wird. Die bestimmungsgemäße Verwendung ist für diese Frage irrelevant, aber bisher habe ich:Abstrakte Klasse mit Standardwert
/**
* 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;
}
}
Jetzt habe ich mit einen Konstruktor hinzufügen möchten, dass dauert nur start
und stop
und setzt einen Standard-Schrittwert von 1
, egal, was die Umsetzung von Number
T
ist (zB wenn T
ist Integer
[one]
würde den Wert 1
, und wenn T
ist Long
[one]
würde den Wert 1L
, und so weiter haben). Ich möchte so etwas wie:
protected Range(T start, T stop) {
this(start, stop, [one]);
}
aber ich kann nicht herausfinden, wie so den Wert von [one]
eingestellt. Da Java mir noch ziemlich neu ist, habe ich versucht, mit:
private static final T one = 1;
, die nicht funktioniert, weil T
offensichtlich in der Instanziierung Range.this
definiert ist. Ich habe auch versucht:
protected static abstract T getOne();
das auch nicht funktioniert, weil T
in der Instanziierung Range.this
definiert ist und static
und abstract
nicht zusammen arbeiten.
Ich brauche eine Möglichkeit für die Erweiterung von Klassen gezwungen werden, den Wert [one]
zu definieren, egal welche Implementierung von Number
Range
implementiert ist.
Letztendlich würde ich auch einen Nullwert als Standard-Start setzen wollen, so dass ich einen Konstruktor, der wie folgt aussieht:
protected Range(T stop) {
this([zero], stop, [one]);
}
Ich bin mir sicher, Nummer ist die richtige Oberklasse zu verwenden. Es gibt interessante Fragen zu diesem Thema: http://stackoverflow.com/questions/2721390/how-to-add-two-java-lang-numbers - Ich meine, auch wenn Sie das herausfinden, wie würden Sie den Schritt hinzufügen Beginnen Sie, über den Bereich zu iterieren? –
'this (start, stop, (T) (neue Ganzzahl (1)));' –