Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将instanceof缩小到特定的子类_Java_Inheritance - Fatal编程技术网

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