Saya baru saja memperhatikan ada pilihan untuk memiliki metode statis di antarmuka. Sama seperti dengan bidang antarmuka statis, ada perilaku yang menarik: Ini tidak diwariskan.
Saya tidak yakin apakah ini berguna dalam antarmuka aktual yang akan diterapkan. Namun, ini memungkinkan programmer untuk membuat antarmuka yang hanya mencakup hal-hal statis, seperti misalnya kelas utilitas.
Contoh sederhana hanyalah sebuah amplop untuk konstanta global. Dibandingkan dengan kelas, Anda dapat dengan mudah melihat pelat ketel yang hilang public static final
seperti yang diasumsikan (membuatnya kurang bertele-tele).
public interface Constants {
String LOG_MESSAGE_FAILURE = "I took an arrow to the knee.";
int DEFAULT_TIMEOUT_MS = 30;
}
Anda juga bisa membuat sesuatu yang lebih kompleks, seperti pseudo-enum kunci konfigurasi ini.
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;
}
}
Anda juga dapat membuat beberapa "kelas" utilitas dengan cara ini. Namun, dalam utilitas, seringkali berguna untuk menggunakan metode pembantu pribadi atau terlindungi, yang tidak mungkin dilakukan di kelas.
Saya menganggapnya sebagai fitur baru yang bagus, dan terutama fakta bahwa anggota statis tidak diwarisi adalah konsep yang menarik yang diperkenalkan ke antarmuka saja.
Saya ingin tahu apakah Anda dapat menganggapnya sebagai praktik yang baik. Sementara gaya kode dan praktik terbaik tidak aksiomatis dan ada ruang untuk berpendapat, saya pikir biasanya ada alasan yang sah untuk mendukung pendapat tersebut.
Saya lebih tertarik dengan alasan (tidak) menggunakan pola seperti ini.
Perhatikan bahwa saya tidak bermaksud mengimplementasikan antarmuka tersebut. Mereka hanyalah sebuah amplop untuk konten statis mereka. Saya hanya bermaksud menggunakan konstanta atau metode dan mungkin menggunakan impor statis.
default
metode. Saya berbicara tentang static
metode dan bidang. Itu tidak diwariskan, jadi mereka tidak merusak banyak warisan.