मैंने सिर्फ डैनियल स्प्य्वैक की इस बात को देखा है, जहां वह स्काला के जावा के नामांकित टाइपिंग की तुलना में संरचनात्मक टाइपिंग के फायदों के बारे में बात करता है । इस अंतर के लिए एक उदाहरण निम्नलिखित जावा कोड होगा
public interface Foo {
public int length();
}
public interface Bar {
public int length();
}
Foo f = ...;
Bar b = f;
निश्चित रूप से जो संकलन नहीं करेंगे, क्योंकि बीच प्रकार संगतता Foo
और Bar
नाम से निर्धारित होता है।
दूसरी ओर एक संरचनात्मक प्रकार की प्रणाली दोनों प्रकार को समान या संगत घोषित कर सकती है और इस प्रकार, अन्य चीजों के अलावा, चेक किए गए बतख टाइपिंग की अनुमति देती है।
अब मुझे लगता है कि मैं एक संरचनात्मक प्रकार की प्रणाली के अधिकांश लाभों को समझता हूं, लेकिन मुझे आश्चर्य है कि अगर यह निम्न उदाहरणों से प्रकार की सुरक्षा को अमान्य नहीं करेगा
class Foo {
class Bar { /* ... */ }
def takeBar(b: Bar) = { /* ... */ }
def getBar: Bar = new Bar
}
val foo1 = new Foo
val foo2 = new Foo
foo1.takeBar(foo1.getBar) // should compile
foo1.takeBar(foo2.getBar) // should not compile
क्या मेरी समझ सही है कि एक संरचनात्मक प्रकार की प्रणाली में अंतिम पंक्ति के रूप में अच्छी तरह से संकलित किया जाएगा और यदि हां, तो क्या यह प्रकार की सुरक्षा के संबंध में नुकसान नहीं होगा?