Java 检查父类是否为子类的实例
我有一个类定义如下:Java 检查父类是否为子类的实例,java,Java,我有一个类定义如下: class Car { } class Audi extends Car { } class Seat extends Car { } class Mercedes extends Car { } class Opel extends Car { } ... List<Car> cars = new ArrayList<Car>(); 还有许多其他类似的定义: class Car { } class Audi extend
class Car {
}
class Audi extends Car {
}
class Seat extends Car {
}
class Mercedes extends Car {
}
class Opel extends Car {
}
...
List<Car> cars = new ArrayList<Car>();
还有许多其他类似的定义:
class Car {
}
class Audi extends Car {
}
class Seat extends Car {
}
class Mercedes extends Car {
}
class Opel extends Car {
}
...
List<Car> cars = new ArrayList<Car>();
我有一种情况,我收到了所有这些汽车的列表,定义如下:
class Car {
}
class Audi extends Car {
}
class Seat extends Car {
}
class Mercedes extends Car {
}
class Opel extends Car {
}
...
List<Car> cars = new ArrayList<Car>();
这将抛出
ClassCastException
。如何处理这种情况?不管明显与否,这都能解决问题:
Car car = cars.get(0);
if(car instanceof Audi) {
Audi audi = (Audi) car;
}
您可以使用
instanceof
:
Car car = cars.get(0);
if (car instanceof Audi) {
// It's an Audi, now you can safely cast it
Audi audi = (Audi) car;
// ...do whatever needs to be done with the Audi
}
然而,在实践中,您应该谨慎地使用
instanceof
——这违反了面向对象编程原则。请参阅,例如:使用instanceof检查,例如:
car instanceof Audi
Car someCar = cars.get(0);
Audi audi = null;
if(someCar instanceof Audi){
audi = (Audi) someCar;
}
if(audi != null){
//...
如果variable car是奥迪的一个实例,则返回true,否则返回false。您可以在铸造前使用
instanceof
。例如:
car instanceof Audi
Car someCar = cars.get(0);
Audi audi = null;
if(someCar instanceof Audi){
audi = (Audi) someCar;
}
if(audi != null){
//...
但这可能是个坏主意,因为引入泛型是为了避免使用强制转换和
instanceof
您可以使用instanceof,但这颠覆了OOP原则。你想做什么?“我怎么知道哪一个是奥迪,哪一个是座位”你为什么要这么做?你的Car
类难道没有你需要的所有Car方法吗?@AdrianLeonhard,我正试图从汽车列表中获取特定汽车的数据。我从另一个地方收到了这个列表,需要处理它。@Pshemo,没有。每个特定的汽车都有一些额外的变量和它的getter和setter。好的,在这种情况下,instanceof
是您要找的操作符。但我仍然感兴趣的是,哪些数据可能包含Seat
,哪些Audi
或其他汽车不应该包含。