2016-04-21 17 views
9

क्या कोई मुझे बता सकता है कि यह संकलित क्यों नहीं करता है?जावा 8 - टर्नरी ऑपरेटर रिटर्निंग फ़ंक्शन संकलित नहीं करता

public class TestClass { 

    private boolean doThis = false; 

    protected void fooThat() {} 

    protected void fooThis() {} 

    public void execute() { 
     (doThis ? this::fooThis : this::fooThat).run(); 
    } 
} 

उत्तर

7

आप क्या इरादा

(doThis ? this::fooThis : (Runnable) (this::fooThat)).run(); 

जावा अकेले विधि नाम आप ?: वापसी करने की उम्मीद किस प्रकार से अनुमान नहीं लगा सकता होने की संभावना है।

मुझे यकीन है कि इस से

if (doThis) 
    fooThis(); 
else 
    fooThat(); 
+0

यही वह था जिसे मैं ढूंढ रहा था। धन्यवाद – redspider

5

बेहतर तरीका यह इस प्रकार है क्या करना है नहीं कर रहा हूँ:

Runnable r = (doThis ? this::fooThis : this::fooThat); 
r.run(); 

आपका कोड संकलन नहीं करता है:

  1. त्रिगुट मूल्य निर्दिष्ट करते समय ऑपरेटर का उपयोग किया जाना चाहिए। यह आपके कोड में मामला नहीं है।
  2. विधि संदर्भ और लैम्ब्डा अभिव्यक्तियों को बाद में अपनी एकल सार विधि को कॉल करने के लिए एक कार्यात्मक इंटरफ़ेस से मिलान किया जाना चाहिए। अपने कोड में, आप अपने विधि संदर्भों के लिए कोई कार्यात्मक इंटरफ़ेस निर्दिष्ट नहीं कर रहे हैं, इसलिए विधि run() बाद में किसी भी प्रकार का आह्वान करने के लिए कोई प्रकार नहीं है।
संबंधित मुद्दे