2011-11-01 11 views
5

मैं एक स्थिर विधि के साथ वर्ग निम्नलिखित है:स्थिर <टी संख्या और तुलनात्मक विस्तार करता है <? सुपर संख्या >>

public class Helper { 

    public static <T extends Number & Comparable<? super Number>> Boolean inRange(T value, T minRange, T maxRange) { 
     // equivalent (value >= minRange && value <= maxRange) 
     if (value.compareTo(minRange) >= 0 && value.compareTo(maxRange) <= 0) 
      return true; 
     else 
      return false; 
    } 

} 

मैं इस विधि कॉल करने का प्रयास करें:

Integer value = 2; 
Integer min = 3; 
Integer max = 8; 
Helper.inRange(value, min, max) ; 

Netbeans संकलक मुझे दिखाओ यह त्रुटि संदेश:

वर्ग हेल्पर में रेंज में दिए गए तरीके को दिए गए प्रकारों पर लागू नहीं किया जा सकता है; आवश्यक: टी, टी, टी मिला: java.lang.Integer, java.lang.Integer, java.lang.Integer कारण: अनुमानित प्रकार घोषित बाध्य (0) अनुमानित नहीं है: java.lang.Integer बाध्य (ओं): java.lang.Number, java.lang.Comparable

कोई विचार?

धन्यवाद।

उत्तर

10

<T extends Number & Comparable<T>> आज़माएं।

उदा। IntegerComparable<Integer> लागू करता है, जो Comparable<? super Number> (इंटीजर संख्या का सुपरक्लास नहीं है) के साथ संगत नहीं है। Comparable<? extends Number> या तो काम नहीं करेगा क्योंकि जावा ?Number का कोई उप-वर्ग हो सकता है, और T से compareTo को तब संकलित नहीं करेगा क्योंकि यह ? के पैरामीटर की अपेक्षा करता है, T नहीं।

संपादित करें: रूप newacct कहा, <T extends Number & Comparable<? super T>> भी काम करेगा (और थोड़ा और अधिक सामान्य हो) के बाद से तो compareTo तो किसी भी ? जिनमें से T एक उपवर्ग है, और हमेशा की तरह स्वीकार करेंगे, एक उपवर्ग का एक उदाहरण दिया जा सकता है एक पैरामीटर के रूप में जहां एक सुपरक्लास की उम्मीद है।

+0

आपको बहुत धन्यवाद, यह काम करता है :) और स्पष्टीकरण के लिए भी धन्यवाद! सर्वोत्तम परिणामों के लिए – misco

+1

, '<टी का विस्तार संख्या और तुलनात्मक > ' – newacct

संबंधित मुद्दे