यह जावाएफएक्स प्रश्न नहीं है, लेकिन मैं JavaFX में एक इंटरफ़ेस लिखने की कोशिश कर रहा हूं जो एक वर्ग को देखने योग्य घोषित करता है। देखने योग्य वर्गों का अर्थ एक दृश्य() विधि है जो उस दृश्यमान का प्रतिनिधित्व करने वाले नोड ऑब्जेक्ट को लौटाता है। अभी तक सरल, लेकिन यहां यह जटिल हो जाता है। लौटाए गए नोड को एक प्राप्त करने योग्य() विधि की गारंटी दी जानी चाहिए जो देखने योग्य ऑब्जेक्ट को दर्शाती है। मैं इसे कैसे पूर्ण करूं? मेरी पहली वृत्ति कुछ इस तरह की कोशिश करने का था:जावा रिटर्न टाइप में एकाधिक जेनेरिक बाउंड लागू करना
interface Viewable<V extends Viewable<V>>{
<N extends Node&View<V>>N view();
}
interface View<V extends Viewable<V>>{
V getViewable();
}
पहली बार में कौन सा ध्वनि प्रकट होता है, और इस तरह के निम्नलिखित वर्गों की अनुमति देता है:
class ViewableObject implements Viewable<ViewableObject>{
@Override public ObjectView view(){
return new ObjectView();
}
class ObjectView extends Pane implements View<ViewableObject>{
@Override public ViewableObject getViewable(){
return ViewableObject.this;
}
}
}
हालांकि, किसी कारण से, इस वर्ग के भी संकलित:
class ViewableObject implements Viewable<ViewableObject>{
@Override public Pane view(){
return new Pane();
}
}
फलक एक नोड है, लेकिन यह दृश्य लागू नहीं करता है, तो यह वर्ग संकलित क्यों करता है? मुझे लगता है कि यह दृश्य() विधि के अनुबंध का उल्लंघन कर रहा है।
class ViewableObject implements Viewable<ViewableObject>{
@Override public Object view(){//complains this is not an @Override
return new Object();
}
}
यहाँ क्या हो रहा है: यहां तक कि अजनबी, एक ही कक्षा जब फलक वस्तु साथ बदल दिया है संकलन करने में विफल रहता है? क्या जेनेरिक की मेरी समझ में कोई दोष है? मैं इसे इरादे के रूप में काम करने के लिए कैसे प्राप्त कर सकता हूं?
सभी प्री-जेनेरिक कोड के साथ पिछड़े संगतता के नाम पर। लेकिन [spec] के मेरे पढ़ने (http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4।5) संकलक के साथ असहमत लगता है। किसी भी मामले में, यह सुरक्षित हो सकता है, बशर्ते कि प्रोग्रामर टाइप सिस्टम में व्यक्त न किए गए बैंड अनुबंधों का पालन करता हो। इस मामले में, फलक का उप-प्रकार लौटा रहा है जो दृश्य लागू करता है – ZhongYu