我目前正試圖擴大一個更大的項目。項目中有些東西是給出的,我有幾個問題可以使我的擴展類型安全。如何用泛型實現類型安全?
我將使示例代碼更一般。
public abstract class Garage {
public <T extends Car> void parkCars(T... car){
// add cars to a list
}
}
抽象類Garage
給出並且有從Garage
延伸幾個給定的類。像SportCarGarage
或SUVCarGarage
。這些車庫在某些方面表現不同。但當然每個車庫都有parkCars
功能。 Car
也有一些不同的孩子,如SportsCar
,SUVCar
等,這些也給出了。
現在我想我只能將SportCars
停在SportCarGarage
。
我的希望是,它的工作是這樣的:
public class SportsCarGarage<T extends SportsCar> extends Garage {
}
...
SportsCarGarage<SportsCar> sportsCarGarage = new SportsCarGarage();
// Would be great if I could do this without adding <SportsCar>
SUVCar bmwX5 = new SUVCar();
SportsCar porsche911 = new SportsCar();
sportsCarGarage.parkCars(porsche911); // works!
sportsCarGarage.parkCars(bmwX5); // shouldn't work, but does. :(
我想我只是有語法錯誤的地方。但是應該有辦法阻止其他開發者將車停放在錯誤類型的車庫中,而不必在每種類型的車庫中覆蓋parkCars
功能!
編輯:
我想我的例子是錯誤的,這就是它不會與我實際工作的代碼工作的原因。感謝您的幫助...
爲什麼你不按照@kocko給出的建議[你以前的問題](http://stackoverflow.com/a/26507271/1225328)?因爲這實際上是你需要的設計...... – sp00m 2014-10-28 08:49:57
你說你正在擴大一個更大的項目。這是否意味着你無法修改Garage類? – 2014-10-28 08:55:42
@ sp00m:如果我理解正確,kockos示例仍然有一個抽象的「parkCars」。我認爲應該有一種方式,而不是在每一個小類中覆蓋它。 – Feroc 2014-10-28 08:56:36