ฉันเพิ่งสังเกตเห็นว่ามีตัวเลือกให้มีวิธีการคงที่ในส่วนต่อประสาน เช่นเดียวกับฟิลด์คงที่ของอินเตอร์เฟสมีพฤติกรรมที่น่าสนใจ: สิ่งเหล่านี้ไม่ได้รับการสืบทอด
ฉันไม่แน่ใจว่ามีประโยชน์ใด ๆ ในส่วนต่อประสานที่เกิดขึ้นจริง อย่างไรก็ตามมันทำให้โปรแกรมเมอร์สามารถสร้างส่วนต่อประสานที่เป็นเพียงซองจดหมายสำหรับสิ่งของแบบคงที่เช่นคลาสยูทิลิตี้
ตัวอย่างง่ายๆเป็นเพียงซองจดหมายสำหรับค่าคงที่ทั่วโลก เมื่อเทียบกับชั้นเรียนคุณสามารถสังเกตเห็นว่าแผ่นที่ขาดหายไปpublic static final
นั้นง่ายกว่าที่คิด (ทำให้มันน้อยลง)
public interface Constants {
String LOG_MESSAGE_FAILURE = "I took an arrow to the knee.";
int DEFAULT_TIMEOUT_MS = 30;
}
คุณสามารถสร้างบางสิ่งที่ซับซ้อนกว่านี้ได้เช่นคีย์หลอกหลอก enum ของ config
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
วิธีการและเขตข้อมูล สิ่งเหล่านั้นไม่ได้รับมรดกดังนั้นพวกเขาจะไม่ทำลายมรดกหลายอย่าง