我的问题是,如何或如果可能的话,了解编译器中对象的动态类型。
我有这个数据

public abstract class accommodation;
public class Hotel extends accomodation;
public class Cabin extends accomodation;
accomodation [] array=  new accomodation[x];


我的实际问题是,可以从中获取仅包含酒店的阵列吗?

最佳答案

是的,有几种方法可以做到这一点。一种是使用getClass()方法。因为这是在Object类中定义的,所以可以在每个Java对象上调用它。

System.out.println(myObject.getClass());


甚至

if (myObject.getClass() == MyClass.class)


但是,如果您只想知道对象是否是特定类的实例,则可以编写

if (myObject instanceof MyType)


如果true的类是myObject或其任何子类型,它将返回MyType。您可以在此处为MyType使用接口或类,甚至可以使用抽象类。

但是,正如Tim在评论中指出的那样,通常有比依赖于检查对象类的方法之一更好的方法来设计程序。谨慎使用多态性可以减少对这两种情况的需求。

09-12 15:15