2009-05-27 15 views
187

मैंने विश्वविद्यालय में रहते हुए 90 के उत्तरार्ध में जेबिल्डर का उपयोग करने के बाद से जावा को छुआ नहीं है, इसलिए मैं इस सप्ताह एक छोटी जावा परियोजना पर काम कर रहा हूं और इंटेलिज आईडीईए का उपयोग कर किसी भी दर पर स्पर्श से थोड़ा दूर हूं मेरे आईडीई, मेरे नियमित नेट विकास से गति में बदलाव के लिए।जावा में इंटरफ़ेस और @ इंटरफेस के बीच क्या अंतर है?

मुझे लगता है कि इसमें इंटरफेस और @interfaces जोड़ने के लिए समर्थन है, @interface क्या है, और यह एक सामान्य इंटरफ़ेस से अलग कैसे है?

public interface Test { 
} 

बनाम

public @interface Test { 
} 

मैं खोज का एक सा किया है, लेकिन उपयोगी जानकारी @interface की चर्चा करते हुए के एक महान सौदा नहीं पा सके।

उत्तर

198

@ प्रतीक एक एनोटेशन प्रकार परिभाषा को दर्शाता है। एक समारोह आपरिवर्तक के रूप में प्रयोग की जाने वाली है, जैसे @override -

यह इसका मतलब है कि नहीं वास्तव में एक अंतरफलक, बल्कि एक नई टिप्पणी का प्रकार है।

इस पर javadocs entry देखें।

+5

महान धन्यवाद एक टिप्पणी के लिए अनुबंध को परिभाषित करता है के लिए अनुबंध को परिभाषित करता है। तो @interface को कॉल करने के लिए तर्क क्या था, बल्कि कहें तो @annotation I wonder .. एक अनावश्यक अधिभारित शब्द की तरह लगता है। – Bittercoder

+4

ट्यूटोरियल और जेएलएस एक एनोटेशन के लिए एक विशेष प्रकार का इंटरफेस होने का संकेत देता है। इस विषय पर बहुत अधिक चर्चा नहीं होती है, लेकिन http://javarunner.blogspot.com/2005/01/annotations-in-java-15.html बताती है कि एनोटेशन एनोटेशन इंटरफ़ेस का एक अंतर्निहित विस्तार है और @ और इंटरफ़ेस का उपयोग एक नियमित इंटरफेस से अलग करने के लिए किया जाता है। आप एनोटेशन के लिए जेएसआर विनिर्देश भी पढ़ना चाहेंगे। – DavidValeri

+0

@ बिटरकोडर दस्तावेज़ों का उल्लेख करते हैं: "कीवर्ड इंटरफ़ेस पहले संकेत (@) (@ = एटी, एनोटेशन प्रकार के रूप में) से पहले होता है"। मैं सभी राशन को देख सकता हूं w.r.t. नामकरण। – Shaishav

25

interface कीवर्ड इंगित करता है कि आप जावा में पारंपरिक इंटरफ़ेस क्लास घोषित कर रहे हैं।
@interface कीवर्ड का उपयोग एक नया एनोटेशन प्रकार घोषित करने के लिए किया जाता है।

वाक्यविन्यास के विवरण के लिए एनोटेशन पर docs.oracle tutorial देखें।
JLS देखें यदि आप वास्तव में @interface का विवरण प्राप्त करना चाहते हैं।

67

इंटरफ़ेस:

सामान्य तौर पर, एक अंतरफलक अंतर्निहित कार्यान्वयन विवरण प्रकट किए बिना एक अनुबंध को उजागर करता है। ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में, इंटरफेस व्यवहार को बेनकाब करने वाले अमूर्त प्रकारों को परिभाषित करते हैं, लेकिन इसमें कोई तर्क नहीं होता है। कार्यान्वयन कक्षा या प्रकार द्वारा परिभाषित किया गया है जो इंटरफ़ेस लागू करता है।

@interface: (टिप्पणी प्रकार)

नीचे दिए गए उदाहरण है, जो टिप्पणी की एक बहुत कुछ है ले लो:

public class Generation3List extends Generation2List { 

    // Author: John Doe 
    // Date: 3/17/2002 
    // Current revision: 6 
    // Last modified: 4/12/2004 
    // By: Jane Doe 
    // Reviewers: Alice, Bill, Cindy 

    // class code goes here 

} 

इस के बजाय, आप एक टिप्पणी का प्रकार घोषणा कर सकते हैं

@interface ClassPreamble { 
    String author(); 
    String date(); 
    int currentRevision() default 1; 
    String lastModified() default "N/A"; 
    String lastModifiedBy() default "N/A"; 
    // Note use of array 
    String[] reviewers(); 
} 

जो तब निम्न श्रेणी को एनोटेट कर सकता है:

@ClassPreamble (
    author = "John Doe", 
    date = "3/17/2002", 
    currentRevision = 6, 
    lastModified = "4/12/2004", 
    lastModifiedBy = "Jane Doe", 
    // Note array notation 
    reviewers = {"Alice", "Bob", "Cindy"} 
) 
public class Generation3List extends Generation2List { 

// class code goes here 

} 

पीएस: कई एनोटेशन कोड में टिप्पणियों को प्रतिस्थापित करते हैं।

संदर्भ: http://docs.oracle.com/javase/tutorial/java/annotations/declaring.html

+5

अच्छा स्पष्टीकरण –

+1

यह वास्तव में उपयोगी था। मुझे नहीं पता था कि जावा ऐसा कर सकता है। –

+0

यह स्वीकार्य उत्तर होना चाहिए। – instinct

5

interface: एक वर्ग है, पता करने के लिए अच्छा है जो लागू करता है यह

@interface:

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