यहाँ एक सरल मेरी समस्या दिखा उदाहरण है:डिफ़ॉल्ट इंटरफ़ेस विधि को लागू करना चाहिए?
import java.util.List;
public interface SingleTask extends List<Runnable>, Runnable {
default Runnable get(final int x) {
if (x != 0) {
throw new IndexOutOfBoundsException();
}
return this;
}
default int size() {
return 1;
}
}
import java.util.AbstractList;
public class MyTask extends AbstractList<Runnable> implements SingleTask {
@Override
public void run() {
System.out.println("hello");
}
}
SingleTask
में मैं तरीकों get
और size
, जो AbstractList
से केवल सार तरीके हैं के लिए कार्यान्वयन प्रदान करते हैं।
The type MyTask must implement the inherited abstract method AbstractCollection.size()
या
MyTask.java:3: error: MyTask is not abstract and does not override abstract method get(int) in AbstractList
(संकलक के आधार पर): हालांकि, जब मैं संकलन MyTask
, मैं अभी भी तरह त्रुटियों मिलता है। मैं निश्चित रूप से कर रहा हूँ,, जावा का उपयोग कर 8.
तो मैं दो प्रश्न हैं:
- मैं इन त्रुटियों को क्यों मिल रहा है? मैं इसे डिफ़ॉल्ट कार्यान्वयन को पहचानने की उम्मीद कर रहा था।
- यदि ऐसा नहीं लगता है, तो पूरे कोड की प्रतिलिपि किए बिना
MyTask
में उन दो विधियों का उपयोग करने का सबसे आसान तरीका क्या है?
अपने कार्यों को 'सूची' का विस्तार न करें (वैसे भी इसका अर्थ क्या है?), इसके बजाय 'सार्वजनिक सूची getRunnables(); विधि के साथ एक इंटरफ़ेस' कार्य 'बनाएं। विफल होने के कारण, बस इंटरफ़ेस के बजाय 'सिंगलटास्क' को एक अमूर्त वर्ग बनाएं। –
biziclop
यह ध्यान देने योग्य है कि ग्रहण 'आकार()' पर लागू नहीं हो रहा है: यह शायद ग्रहण बग है। 'जावैक' 1.8.0_51 'प्राप्त (int)' पर लागू हो रहा है, यह लागू नहीं किया जा रहा है और यह सही है: इसे लागू नहीं किया गया है। – Tunaki
@biziclop यह कार्यों की एक सूची माना जाता है; SingleTask एक सिंगलटन कार्यान्वयन – aditsu