我目前正试图扩大一个更大的项目。项目中有些东西是给出的,我有几个问题可以使我的扩展类型安全。如何用泛型实现类型安全?
我将使示例代码更一般。
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