Java 将instanceof缩小到特定的子类
如何将Java 将instanceof缩小到特定的子类,java,inheritance,Java,Inheritance,如何将instanceof缩小到特定的子类,而不以父类结束 例如,如果我应该有一个父类StackoverflowUsers,那么我就有直接子类TenKUsers,HundredKusers等等。。现在我的问题是如何使用instanceof来获取对象是否是StackoverflowUsers的一个直接子类的实例,而不是以我的对象是StackoverflowUsers的实例而结束。。这可能吗?只需使用TenKUsers的instanceof(等)习惯用法 它将告诉您正在查看的对象是否是该基类的子对象
instanceof
缩小到特定的子类,而不以父类结束
例如,如果我应该有一个父类
StackoverflowUsers
,那么我就有直接子类TenKUsers
,HundredKusers
等等。。现在我的问题是如何使用instanceof
来获取对象是否是StackoverflowUsers
的一个直接子类的实例,而不是以我的对象
是StackoverflowUsers
的实例而结束。。这可能吗?只需使用TenKUsers的instanceof
(等)习惯用法
它将告诉您正在查看的对象是否是该基类的子对象
由于您暗示
TenKUsers
是StackoverflowUsers
的子对象,因此对于该对象,StackoverflowUsers
的实例也将为true
您可以通过检查.getClass()
排除超类本身,但“孙子”也将被匹配
您可以使用反射,但一般来说,应该避免反射(这是一种“欺骗”)
也许你应该重新考虑你的课程。似乎
TenKUsers
也可以是存储在StackoverflowUsers内部的布尔标志。或者更好:给StackoverflowUsers一个枚举集
,并让文档包含“TenKUser”和“HundredKusers”。除了Mena的答案之外,如果您想使用instanceof
进行检查,您可以将超类Stackoverflowusers
抽象,以确保不存在任何实例,然后检查:
object instanceof Stackoverflowusers
那么,HundredKusers.class.isAssignableFrom()呢?我也试过了,非常有帮助,谢谢@Vyncent,但这是一种更好的方法还是另一种方法谢谢,先生,你救了我。最后一个问题,但是
HundredKusers.class.isAssignableFrom(o.getClass())
是这个或的替代方案吗?我只是问一下,但我已经投了赞成票,我会的accept@supporter不客气。反射方法isAssignableFrom
记录如下:“如果参数表示的类型可以通过标识转换或加宽引用转换(即,如果接收方或参数表示基元类型,则仅应用标识转换),则回答true。”。因此,它做得更多一些(例如,请参见基本体部分),但应该是等效的。如果可能的话,人们通常会倾向于使用instanceof
而不是反射。谢谢您,先生,您也帮助我理解了它。我将投票
Instance of String: false
Instance of StackoverflowUsers (superclass): false
Instance of TenKUsers (direct subclass): true
Instance of HundredKusers (direct subclass): true
Instance of EtcEtc (indirect subclass): true
using reflection:
Instance of String: false
Instance of StackoverflowUsers (superclass): false
Instance of TenKUsers (direct subclass): true
Instance of HundredKusers (direct subclass): true
Instance of EtcEtc (indirect subclass): false
object instanceof Stackoverflowusers