मैंने अभी हाल ही में देखा है कि इंटरफेस में स्टेटिक तरीके होने का विकल्प है। इंटरफ़ेस के स्थिर क्षेत्रों के साथ भी, एक दिलचस्प व्यवहार है: ये विरासत में नहीं मिले हैं।
मैं अनिश्चित हूं कि इसे लागू करने वाले वास्तविक इंटरफेस में कोई उपयोगी है। हालांकि, यह प्रोग्रामर को ऐसे इंटरफेस बनाने में सक्षम बनाता है जो स्थिर सामान के लिए सिर्फ लिफाफे हैं, जैसे कि उपयोगिता वर्ग हैं।
एक सरल उदाहरण वैश्विक स्थिरांक के लिए सिर्फ एक लिफाफा है। एक वर्ग की तुलना में, आप आसानी से लापता बॉयलरप्लेट को नोटिस कर सकते हैं public static final
क्योंकि वे ग्रहण किए जाते हैं (इसे कम क्रिया बनाते हैं)।
public interface Constants {
String LOG_MESSAGE_FAILURE = "I took an arrow to the knee.";
int DEFAULT_TIMEOUT_MS = 30;
}
आप कुछ और अधिक जटिल भी बना सकते हैं, जैसे कि कॉन्फिग कुंजियों का छद्म ज्ञान।
public interface ConfigKeys {
static createValues(ConfigKey<?>... values) {
return Collections.unmodifiableSet(new HashSet(Arrays.asList(values)));
}
static ConfigKey<T> key(Class<T> clazz) {
return new ConfigKey<>(clazz);
}
class ConfigKey<T> {
private final Class<T> type;
private ConfigKey(Class<T> type) {
this.type = type;
}
private Class<T> getType() {
return type;
}
}
}
import static ConfigKeys.*;
public interface MyAppConfigKeys {
ConfigKey<Boolean> TEST_MODE = key(Boolean.class);
ConfigKey<String> COMPANY_NAME = key(String.class);
Set<ConfigKey<?>> VALUES = createValues(TEST_MODE, COMPANY_VALUE);
static values() {
return VALUES;
}
}
आप इस तरह से कुछ उपयोगिता "वर्ग" भी बना सकते हैं। हालांकि, उपयोगिताओं में, निजी या संरक्षित सहायक विधियों का उपयोग करना अक्सर उपयोगी होता है, जो कक्षाओं में काफी संभव नहीं है।
मैं इसे एक अच्छी नई विशेषता मानता हूं, और विशेष रूप से यह तथ्य कि स्थैतिक सदस्यों को विरासत में नहीं मिला है, एक दिलचस्प अवधारणा है जिसे केवल इंटरफेस में पेश किया गया था।
मुझे आश्चर्य है कि क्या आप इसे एक अच्छा अभ्यास मान सकते हैं। हालांकि कोड शैली और सर्वोत्तम अभ्यास स्वयंसिद्ध नहीं हैं और राय के लिए जगह है, मुझे लगता है कि आम तौर पर राय देने के पीछे वैध कारण हैं।
मुझे इन दोनों जैसे पैटर्न का उपयोग करने के कारणों (नहीं) में अधिक दिलचस्पी है।
ध्यान दें कि मैं उन इंटरफेस को लागू करने का इरादा नहीं करता हूं। वे अपनी स्थिर सामग्री के लिए केवल एक लिफाफा हैं। मैं केवल स्थिरांक या विधियों का उपयोग करने का इरादा रखता हूं और संभवतः स्थैतिक आयात का उपयोग करता हूं।
default
तरीकों के बारे में बात कर रहे हैं । मैं static
तरीकों और क्षेत्रों के बारे में बात कर रहा हूं । वे विरासत में नहीं मिले हैं, इसलिए वे कई विरासत को नहीं तोड़ते हैं।