Java – 是否有像instanceof这样的“子类”?
我重写了equals()方法,我需要知道对象是否是Event的子类的实例(Event是超类)。 我想要像“obj subclassof Event”这样的东西。 怎么做到这一点?
提前致谢!
instanceof
可以处理就好了。
使用以下代码,您可以检查对象是否是扩展Event但不是Event类实例本身的类。
if(myObject instanceof Event && myObject.getClass() != Event.class) { // then I'm an instance of a subclass of Event, but not Event itself }
默认情况下, instanceof
检查对象是否为指定的类,或者是否为任何级别的Event的子类(扩展或实现)。
真的应该足够好但是如果你想确定这个类真的是一个子类,那么你可以这样提供检查:
if (object instanceof Event && object.getClass() != Event.class) { // is a sub-class only }
由于阿德里安有点领先于我,我还将添加一种方法,你可以用通用方法做到这一点。
public static boolean isSubClassOnly(Class clazz, Object o) { return o != null && clazz.isAssignableFrom(o) && o.getClass() != clazz; }
使用此:
if (isSubClassOnly(Event.class, object)) { // Sub-class only }
您可能希望查看someObject.getClass().isAssignableFrom(otherObject.getClass());
Java中没有直接的方法来检查子类。 instanceof Event
将为任何子类对象返回true
您可以在对象上执行getClass()
,然后在Class
对象上使用getSuperclass()
方法来检查超类是否为Event
。
如果obj是Event的子类,那么它就是一个instanceof。 obj是它派生自的每个类/接口的实例。 所以至少所有对象都是Object的实例。
- 调用存在于子类中但不存在于父类中的方法
- 切换java中的类型
- 如何使用编译时genericsvalidation替换运行时instanceof检查
- java优化nitpick:在投射之前调用instanceof进行检查是否更快投出一些东西并让它抛出exception?
- 如何实现与hibernate相等而不会失去对称属性的风险?
- 检查注释是否属于特定类型
- 通过Collections.unmodifiable *已经用Collections.unmodifiable *包装的实例是多么低效?
- Java:未选中从X转换为Y /如何实现castOrNull
- 当用于2个不兼容的类时,为什么`instanceof`错误而不是返回`false`?