如何知道类的动态类型?

时间:2017-12-20 04:06:11

标签: java

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

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

我的实际问题是,我可以获得一个只包含此酒店的阵列吗?

2 个答案:

答案 0 :(得分:2)

一种方法是使用filtermap来首先过滤掉Hotel的所有对象,然后转换为Hotel

Arrays.stream(array)
    .filter(x -> x instanceof Hotel)
    .map(x -> (Hotel)x)
    .collect(Collectors.toList());

答案 1 :(得分:0)

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

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

甚至

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

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

if (myObject instanceof MyType)

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

然而,正如蒂姆在评论中指出的那样,通常有更好的方法来设计你的程序,而不是依赖于这些检查对象类的方法之一。仔细使用多态性可以减少对这两种方法的需求。