मैं समय श्रृंखला डेटा का प्रतिनिधित्व करने के लिए एक वर्ग है, लिख रहा हूँ यानी मूल रूप से एक सामान्य प्रकार T
जेनेरिक पैरामीटर
interface TimeSeries<T> {
void add(Instant when, T data);
}
कक्षाओं हम एक को लागू से निपटने में से कुछ के लिए (Instant, T)
जोड़े का एक नक्शा इंटरफ़ेस
interface TimeStamped {
Instant getTimeStamp();
}
और मैं स्पष्ट रूप से समय बताते हुए बिना इस तरह के डेटा आइटम जोड़ने के लिए TimeSeries
इंटरफ़ेस में एक और अधिक सुविधाजनक तरीका प्रदान करना चाहते हैं। असल में, मुझे
interface TimeSeries<T> {
void add(Instant when, T data);
default <X extends T & TimeStamped> void add(X data) {
add(data.getTimeStamp(), data);
}
}
but this seems not allowed by the language because I cannot use type variables in intersection types चाहिए। क्या कोई काम-आसपास है जिसमें स्थैतिक प्रकार-सुरक्षा को छोड़ना शामिल नहीं है? केवल बातें मैं के साथ आ सकते हैं
interface TimeSeries<T> {
void add(Instant when, T data);
default void add(TimeStamped data) {
add(data.getTimeStamp(), (T)data);
}
default void add(TimeStamped t, T data) {
add(t.getTimeStamp(), data);
}
}
add(TimeStamped t, T data)
टाइप-सुरक्षित है लेकिन अभी भी असुविधाजनक है।
एक सरल समाधान का एक 'इंटरफ़ेस TimeStampedTimeSeries होगा TimeSeries' फैली <टी टाइमस्टैंप फैली> - आप इसे इस्तेमाल कर सकते हैं जब timeseries को आबाद करने और जब यह लेने तुम सिर्फ 'TimeSeries >' का उल्लेख कर सकते हैं। –
assylias
एक और कार्यवाही एक स्थिर विधि स्थिर <एक्स टाइमस्टैम्प> शून्य जोड़ (टाइमसरीज super X> टाइमरीज़, एक्स एक्स) –
@cppbeginner का उपयोग करना है कि कोई भी अतिरिक्त सादगी नहीं लाता है। – Vlasec