2015-12-29 3 views
6

मुझे पता है कि एक अतिरिक्त बाध्य निर्दिष्ट करते समय पहली बाउंड जावा में एक प्रकार पैरामीटर संभव नहीं है; हालांकि, मैं सोच रहा था कि क्या कोई ऐसा कुछ करने का वैकल्पिक तरीका जानता है और इसे संकलित समय पर सुरक्षित रखने के लिए? मैंने नीचे एक उदाहरण दिया है।क्या पहली बाध्य एक प्रकार पैरामीटर है जब अतिरिक्त बाध्य निर्दिष्ट करने का कोई वैकल्पिक तरीका है?

निम्न कोड में जो मैं संदर्भित कर रहा हूं वह यह है: <E extends T & Comparable<T>>। इस स्थिति में, यदि T का प्रकार तुलनीय है, तो मैं इनबिल्ट तुलनित्र का उपयोग करने में सक्षम होना चाहता हूं, अन्यथा, मैं अपना खुद का तुलनित्र निर्दिष्ट करना चाहता हूं।

क्या संकलन समय पर टाइप-सुरक्षा रखते हुए ऐसा करने का कोई वैकल्पिक तरीका है?

public class ExampleClass<T, U> { 
    [...] 

    public <E extends T & Comparable<T>> ExampleClass(Function<U, E> function) { 
    this.function = function; 
    this.comparator = (E a, E b) -> a.compareTo(b); 
    } 

    public ExampleClass(Function<U, T> function, Comparator<U> comparator) { 
    this.function = function; 
    this.comparator = comparator; 
    } 

} 

उत्तर

3

आप एक स्थिर पद्धति के रूप में पहले निर्माता को लागू करने से आपकी समस्या का समाधान कर सकते हैं कि अपने दूसरे निर्माता के प्रतिनिधियों, इस तरह:

import java.util.Comparator; 
import java.util.function.Function; 

public class Test<T,U> { 
    private final Function<U,T> function; 
    private final Comparator<T> comparator; 

    public Test(Function<U,T> function, Comparator<T> comparator) { 
    this.function = function; 
    this.comparator = comparator; 
    } 

    public static <E extends Comparable<E>, V> Test<E,V> withNatOrder(Function<V,E> function) { 
     // Any of these two will do 
     final Comparator<E> comp = (E a, E b) -> a.compareTo(b); 
     final Comparator<E> comp2 = Comparator.naturalOrder(); 
     return new Test<>(function, comp); 
    } 
} 

स्थिर समारोह वर्ग प्रकार पैरामीटर के लिए पहुँच नहीं है टी और यू, इसलिए यह नए, स्वतंत्र लोगों को परिभाषित करता है। वापसी का प्रकार अब Test<E,V> है जहां ई तुलनात्मक लागू करता है और वी आपके यू पैरामीटर की तरह असंबद्ध है।

+0

'तुलनाकर्ता के साथ अच्छी युक्ति। प्राकृतिक ऑर्डर();'! –

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

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