今天我正在考慮爲不同對象所需的通用功能編寫較少代碼的好方法。Java 8中接口的默認方法中使用的陰影變量
繼承可以完成這項工作,但這些類將無法繼承其他任何人,所以我選擇了接口。
所以,我有我的功能,我會需要一些對象接口:
public interface Test {
String message = "Hello from Interface!";
default void printMessage() {
System.out.println(message);
}
}
,然後我可以在任何物體使用它,而不必重寫/寫任何代碼不僅僅是簡單地調用方法更當需要時:
public class TestingTest implements Test {
public String message = "Hello from Class!";
public TestingTest() {
printMessage();
}
public static void main(String[] args) {
new TestingTest();
}
}
它的作品就像一個魅力!但是......然後我想,如果我希望這些對象中的某些指定不同的消息而不需要(可選),那麼我首先想到的就是對接口變量進行遮蔽,但它不起作用,默認方法繼續使用來自接口的變量而不是類變量(它影響它)。
解決方案當然是重載接口中的printMessage方法,以便在用戶需要指定消息時接收消息作爲參數,但有沒有更優雅的方法?就像只是在課堂上宣佈一條新消息一樣?
謝謝先進。
你可以去[反思]( http://stackoverflow.com/questions/3301635/change-private-static-final-field-using-java-reflection),但這種選擇會更糟,然後試圖影響變量,因爲它可能導致討厭的錯誤。 – SomeJavaGuy
我同意你的看法,反思應該是最後的手段! –
如何創建一個默認的'getMessage()'並覆蓋它? – Tunaki