2017-04-24 14 views
6

मैं एक कारखाने (रजिस्ट्री डीपी) जो कक्षा initializes है:अनुमान नहीं लगा सकता कार्यात्मक इंटरफ़ेस प्रकार जावा 8

public class GenericFactory extends AbstractFactory { 

    public GenericPostProcessorFactory() { 
     factory.put("Test", 
       defaultSupplier(() -> new Test())); 
     factory.put("TestWithArgs", 
       defaultSupplier(() -> new TestWithArgs(2,4))); 
    } 

} 

interface Validation 

Test implements Validation 
TestWithArgs implements Validation 

और में AbstractFactory

protected Supplier<Validation> defaultSupplier(Class<? extends Validation> validationClass) { 
     return() -> { 
      try { 
       return validationClass.newInstance(); 
      } catch (InstantiationException | IllegalAccessException e) { 
       throw new RuntimeException("Unable to create instance of " + validationClass, e); 
      } 
     }; 
    } 

लेकिन मैं बार आ रही है कार्यात्मक इंटरफ़ेस प्रकार अनुमान नहीं लगा सकता त्रुटि। मैं यहाँ क्या गलत कर रहा हूँ?

+0

तथ्य यह है कि अपने लैम्ब्डा फेंकता है और हर शाखा में वापस नहीं करता है हो सकता है भ्रमित हो जाओ। मुझे लगता है कि इस कारण से अपना खुद का कार्यात्मक इंटरफ़ेस लिखना है। – Carcigenicate

उत्तर

7

आपकी defaultSupplier विधि में Class का तर्क प्रकार है। आप एक लैम्ब्डा अभिव्यक्ति नहीं पारित कर सकते हैं जहां Class अपेक्षित है। लेकिन आपको वैसे भी defaultSupplier उस विधि की आवश्यकता नहीं है।

Test के बाद से और TestWithArgsValidation का एक उपप्रकार हैं, लैम्ब्डा () -> new Test() भाव और () -> new TestWithArgs(2,4) कि विधि के बिना Supplier<Validation> को आबंटित पहले से ही कर रहे हैं:

public class GenericFactory extends AbstractFactory { 
    public GenericPostProcessorFactory() { 
     factory.put("Test",() -> new Test()); 
     factory.put("TestWithArgs",() -> new TestWithArgs(2,4)); 
    }  
} 
संबंधित मुद्दे

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