[英]Type-safe interface when instantiated/returned from enum (Java)
假設我們有一個汽車對象:
public interface Automobile {
}
我們還有幾款不同的汽車(is-a),一款配備自動變速箱,一款配備手動變速箱:
public class FordExplorer implements Autmomobile {
public static void shiftIntoPark() {
}
}
public class Porsche911 implements Autmomobile {
public static void shiftInto1stGear() {
}
}
現在,假設我們有一個 enum Garage,它存儲這些汽車:
public enum Garage {
FORD {
public Automobile getCar() {
return new FordExplorer();
}
}, PORSCHE {
public Automobile getCar() {
return new Porsche911();
}
};
abstract public Automobile getCar();
}
}
此實現(或類似實現)是否有類型安全的“最佳實踐”(即,FORD 的 getCar() 方法的返回類型僅包括 shiftIntoPark() 方法,同樣, PORSCHE 相同方法的返回類型僅包括 shiftInto1stGear() 方法)?
Garage.getCar 返回的類型是Automobile,它不會公開任何這些park 方法。 由於 shift 方法是靜態的,因此您不會從中獲得多態行為,因此必須在特定類上調用它們。
您很可能期望使用汽車的東西在使用汽車方面過於聰明,從而違背了使用界面的目的。 像這樣使用接口或超類的目的是讓程序可以在高層操作對象而無需關心實現細節,讓不同的對象實現自己照顧自己。 一個類似的玩具示例可能是一個汽車,它公開了一個 park 方法,其中 park 方法由特定的子類根據其特定需要以不同的方式實現。
(或者完全擺脫界面,因為駕駛野馬與駕駛卡羅拉完全不同,他們共享界面可能沒有意義。)
接口和超類有助於提供高級接口並隱藏實現細節,以便它們可以在本地包含並且不會泄漏到程序的其余部分。 確定您希望如何使用該對象,它定義了您希望公開的接口,以及您希望該對象自行處理什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.