मैं एक सार श्रेणी श्रेणी को परिभाषित करने की कोशिश कर रहा हूं जो कई श्रेणी वर्गों के मूल कार्यान्वयन के रूप में कार्य करेगा। इच्छित उपयोग इस प्रश्न के लिए अप्रासंगिक है, लेकिन अभी तक मेरे पास है:डिफ़ॉल्ट मान के साथ सार वर्ग
/**
* 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;
}
}
अब मुझे लगता है कि केवल start
और stop
लेता है के साथ एक निर्माता जोड़ना चाहते हैं, और 1
की डिफ़ॉल्ट कदम मूल्य निर्धारित करता है, कोई बात नहीं क्या कार्यान्वयन Number
की T
है (उदाहरण के लिए यदि T
Integer
[one]
मूल्य 1
है, और अगर T
है Long
[one]
मूल्य 1L
होता, और इतने पर है)। मैं कुछ ऐसा करना चाहते हैं:
protected Range(T start, T stop) {
this(start, stop, [one]);
}
लेकिन मैं समझ नहीं कैसे इतना [one]
का मूल्य निर्धारित किया है। के बाद से जावा अभी भी काफी मेरे लिए नया है, मैं के साथ की कोशिश की है:
private static final T one = 1;
जो क्योंकि T
जाहिर Range.this
की इन्स्टेन्शियशन में परिभाषित किया गया है काम नहीं करता। इसके अलावा, मैं कोशिश की है:
protected static abstract T getOne();
क्योंकि T
Range.this
प्लस static
और abstract
की इन्स्टेन्शियशन में परिभाषित किया गया है एक साथ काम नहीं करते जो भी काम नहीं करता।
मुझे [one]
के मूल्य को परिभाषित करने के लिए कक्षाओं को विस्तारित करने के लिए कुछ तरीकों की आवश्यकता है, इससे कोई फर्क नहीं पड़ता कि Number
Range
के कार्यान्वयन के लिए क्या लागू किया गया है।
अंत में मैं भी डिफ़ॉल्ट शुरुआत के रूप में एक शून्य मान, सेट करना चाहते हैं इस तरह मैं एक निर्माता है कि इस तरह दिखता है मिलता है कि:
protected Range(T stop) {
this([zero], stop, [one]);
}
मुझे यकीन है कि संख्या का उपयोग करने के लिए सही सुपरक्लास है। इस विषय पर दिलचस्प सवाल है: http://stackoverflow.com/questions/2721390/how-to-add-two-java-lang-numbers - मेरा मतलब है कि अगर आप इसे समझते हैं, तो आप कैसे कदम जोड़ देंगे सीमा से फिर से शुरू करना शुरू करें? –
'यह (प्रारंभ, रोकें, (टी) (नया इंटीजर (1)));' –