我的问题是,如何或如果可能的话,知道编译器中对象的动态类型。 我有这个数据
public abstract class accommodation;
public class Hotel extends accomodation;
public class Cabin extends accomodation;
accomodation [] array= new accomodation[x];
我的实际问题是,我可以获得一个只包含此酒店的阵列吗?
答案 0 :(得分:2)
一种方法是使用filter
和map
来首先过滤掉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
的接口或类 - 甚至是抽象类。
然而,正如蒂姆在评论中指出的那样,通常有更好的方法来设计你的程序,而不是依赖于这些检查对象类的方法之一。仔细使用多态性可以减少对这两种方法的需求。