2013-02-13 40 views
10

मैं इस साइट का उपयोग लगभग 6 महीने के लिए कर रहा हूं, और मेरा पहला सवाल पूछने का समय है, क्योंकि मुझे इसका जवाब नहीं मिल रहा है, कम से कम कोई जवाब नहीं जिसे मैं समझ सकता हूं!जावा - इंटरफेस खुद को विस्तारित कर रहा है

इस बिट कोड में, यह इंटरफ़ेस स्वयं को क्यों बढ़ा रहा है?

public interface PositionedVertex<V extends PositionedVertex<V>> { 

/** 
* @return Position for node data. 
*/ 
public Point getPosition(); 
} 

wouldnt इस कोड को पहले से ही ?:

public interface PositionedVertex<V> { 

/** 
* @return Position for node data. 
*/ 
public Point getPosition(); 
} 

धन्यवाद करते हैं!

+0

आपको वास्तव में उत्कृष्ट उत्तरों में से एक स्वीकार करना चाहिए। –

उत्तर

4

पहले मामले में, आपने अपने सामान्य प्रकार पैरामीटर को interface के उप प्रकार के रूप में बाध्य किया है, जबकि दूसरे मामले में, आपके पास सामान्य प्रकार पैरामीटर के रूप में कोई प्रकार हो सकता है। इसलिए, वे संभावित रूप से अलग घोषणाएं हैं।

उदाहरण के लिए, आप की तरह एक संदर्भ को परिभाषित कर सकते हैं:

PositionedVertex<String> 
2nd interface type के लिए

, लेकिन 1st one के लिए नहीं।

+0

धन्यवाद! सुपर त्वरित जवाब! – user2069658

+0

@ user2069658। आपका स्वागत है :) –

+0

+1, अच्छा उदाहरण। – rgettman

1

यह स्वयं को विस्तारित नहीं कर रहा है। यह निर्दिष्ट कर रहा है कि इसका सामान्य पैरामीटर वी उस प्रकार का प्रतिनिधित्व करना चाहिए जो स्वयं को बढ़ाता या लागू करता है।

10

इंटरफ़ेस स्वयं को विस्तारित नहीं कर रहा है। <V extends PositionedVertex<V>> आपके इंटरफ़ेस से जुड़े सामान्य प्रकार पर एक बाध्य है। इसका मतलब यह है कि इस इंटरफ़ेस को लागू करने वाले किसी भी वर्ग के लिए सामान्य प्रकार पैरामीटर स्वयं PositionedVertex होना चाहिए।

0

कोई और कोड नहीं दिखाए बिना क्यों कह रहा है। या यह सब है? वास्तव में यह आपको बता रहा है कि इस इंटरफ़ेस में किसी प्रकार का उपयोग किया जाता है (एक फ़ंक्शन के पैरामीटर के रूप में, या रिटर्न प्रकार के रूप में) जो कि इंटरफ़ेस के समान ही होता है।

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

  • कोई संबंधित समस्या नहीं^_^