Son zamanlarda arayüzlerde statik yöntemlere sahip olmak için bir seçenek olduğunu fark ettim. Arayüzün statik alanları ile aynı, ilginç bir davranış vardır: Bunlar kalıtsal değildir.
Uygulanacak gerçek arayüzlerde herhangi bir yararlı olduğundan emin değilim. Bununla birlikte, programlayıcının, örneğin, yardımcı sınıflar gibi, statik şeyler için yalnızca zarf olan arabirimler oluşturmasını sağlar.
Basit bir örnek sadece küresel sabitler için bir zarftır. Bir sınıfa kıyasla, eksik olan kazan plakasını public static final
varsayıldığı gibi kolayca fark edebilirsiniz (daha az ayrıntılı hale getirir).
public interface Constants {
String LOG_MESSAGE_FAILURE = "I took an arrow to the knee.";
int DEFAULT_TIMEOUT_MS = 30;
}
Yapılandırma anahtarlarının sözde enumumu gibi daha karmaşık bir şey de yapabilirsiniz.
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;
}
}
Ayrıca bu şekilde bazı "sınıf" yardımcı programı da oluşturabilirsiniz. Bununla birlikte, kamu hizmetlerinde, sınıflarda tam olarak mümkün olmayan özel veya korumalı yardımcı yöntemleri kullanmak genellikle yararlıdır.
Bunu yeni ve güzel bir özellik olarak görüyorum ve özellikle statik üyelerin miras alınmaması sadece arayüzlere tanıtılan ilginç bir kavram.
Acaba bunu iyi bir uygulama olarak değerlendirebilir misin? Kod stili ve en iyi uygulamalar aksiyomatik olmasa da, görüş için yer olsa da, genellikle görüşü destekleyen geçerli nedenler olduğunu düşünüyorum.
Bu ikisi gibi kalıpları kullanmanın nedenleriyle (değil) daha çok ilgileniyorum.
Bu arayüzleri uygulamak istemediğimi unutmayın. Onlar sadece statik içeriği için bir zarf. Ben sadece sabitleri veya yöntemleri kullanmak ve muhtemelen statik içe aktarma kullanmak niyetinde.
default
yöntemlerden bahsediyorsun . static
Yöntemler ve alanlar hakkında konuşuyorum . Bunlar miras alınmaz, bu yüzden çoklu mirastan kopmazlar.