2012-08-27 19 views
15

क्या जावा 8 में सार्वजनिक सदस्य चर किसी सुविधा या कार्यान्वयन दुष्प्रभाव/दोष को इंटरफेस करते हैं?जावा 8 (प्री-रिलीज) इंटरफ़ेस सदस्य चर

यह प्रश्न प्री-रिलीज जावा 8 बिल्ड lambda-8-b50-linux-x64-26_jul_2012.tar.gz से पूर्व-रिलीज़ से संबंधित है।

जावा 8 डिफ़ॉल्ट तरीकों के रूप में इंटरफेस में नई विशेषताएं पेश करता है।

public interface Foo { 
    public int foo = 0; 
    int foo() default { return foo; } 
} 

नमूना को लागू करने के प्रकार::

Foo f = new FooImpl(); 
System.out.println(f.foo()); 
System.out.println(f.foo); 
System.out.println(new FooImpl().foo); 

आउटपुट:

public class FooImpl implements Foo { 
    public int foo = 1; 
} 

इस कोड को चर छाया के लिए मानक सम्मेलनों इस प्रकार JDK8 लैम्ब्डा संकलक के साथ आरामदायक परीक्षण इस फार्म के इंटरफेस की अनुमति देता है:

0 
0 
1 

प्रलेखन (जेएसआर 335: जावा ™ प्रोग्रामिंग भाषा संस्करण 0.5.1 के लिए लैम्ब्डा अभिव्यक्ति) सदस्य चर का उल्लेख नहीं करता है। मुझे लगता है कि संकलक बहुत सहनशील है लेकिन शायद मुझे कुछ याद आया है।

उत्तर

27

इंटरफेस में सार्वजनिक क्षेत्र जावा 8 में एक नई विशेषताएं नहीं हैं। यदि आपको याद है कि वे निश्चित रूप से स्थैतिक और अंतिम हैं, तो परिणाम जो आप देख रहे हैं वह सही समझ में आता है।

+2

परीक्षण करने के लिए, 'Foo.foo = 0;' – oldrinb

+4

+1 आज़माएं - और हम जोड़ सकते हैं कि जावा 8 सार्वजनिक इंटरफ़ेस फ़ील्ड को गैर-स्थैतिक और/या गैर-फाइनल में मौजूदा कोड को तोड़ने के बिना नहीं बदल सका विभिन्न तरीके। –

+2

दोह! आप सही हैं - मैं पिछले 15 वर्षों से उन्हें स्थिर फाइनल घोषित कर रहा हूं। जेएलएस का प्रासंगिक खंड यहां दिया गया है: [9.3। फ़ील्ड (निरंतर) घोषणाएं] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.3)। – McDowell

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