क्या जावा 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 के लिए लैम्ब्डा अभिव्यक्ति) सदस्य चर का उल्लेख नहीं करता है। मुझे लगता है कि संकलक बहुत सहनशील है लेकिन शायद मुझे कुछ याद आया है।
परीक्षण करने के लिए, 'Foo.foo = 0;' – oldrinb
+1 आज़माएं - और हम जोड़ सकते हैं कि जावा 8 सार्वजनिक इंटरफ़ेस फ़ील्ड को गैर-स्थैतिक और/या गैर-फाइनल में मौजूदा कोड को तोड़ने के बिना नहीं बदल सका विभिन्न तरीके। –
दोह! आप सही हैं - मैं पिछले 15 वर्षों से उन्हें स्थिर फाइनल घोषित कर रहा हूं। जेएलएस का प्रासंगिक खंड यहां दिया गया है: [9.3। फ़ील्ड (निरंतर) घोषणाएं] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.3)। – McDowell