【问题标题】:Check subclass of an object in Java [duplicate]检查Java中对象的子类[重复]
【发布时间】:2016-04-14 10:23:20
【问题描述】:

考虑类MinorClassAMinorClassB,它们都扩展了MajorClass。我有一个MajorClass 的对象,我确信它实际上是它的一个子类的一个实例。

MinorClassA subclassedObj = new MinorClassA();
MajorClass obj = subclassedObj;

//------ More code -------------

if( subclassof(obj) == MinorClassA) //Something like this

我怎样才能知道该对象的子类是什么?我无法访问subclassedObj,只能访问obj

编辑澄清:我知道如何检查MinorClassA 是否是MajorClass 的实例,但不是相反。

【问题讨论】:

  • if (obj instanceof classname) ...
  • 我怎样才能知道那个对象的子类是什么?编程到接口,你为什么要确定具体的类型?
  • @ElliottFrisch:“编程到界面”应该被视为一个很好的一般规则,而不是在任何情况下都遵循的教条。检查对象的执行时间类型可能有正当理由。
  • obj instanceof MinorClassA ?
  • @JonSkeet 当然,这就是我在评论中问的原因;我不知道 OP 的用例是什么。

标签: java class subclass instanceof


【解决方案1】:

听起来你想要instanceof operator:

在运行时,如果 RelationalExpression 的值不为 null 并且引用可以强制转换为 ReferenceType,则 instanceof 运算符的结果为真提高ClassCastException。否则结果为假。

所以在你的情况下:

if (obj instanceof MinorClassA) {
    ...
}

【讨论】:

  • instance of 同时进行编译时和运行时检查以执行父子类关系分析。 bytepadding.com/java/java-instanceof
  • @KrazyGautam:是的,但是编译时检查与这个问题无关。
【解决方案2】:

使用 instanceof 检查 obj 是否是 Class 的实例:

if (obj instanceof MinorClassA) {
   System.out.println("obj is an instance of MinorClassA");
} else if (obj instanceof MinorClassB) {
   System.out.println("obj is an instance of MinorClassB");
}

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 2020-04-27
    • 2020-12-21
    • 2014-08-06
    • 2016-12-12
    • 1970-01-01
    • 2018-10-08
    • 2015-11-29
    相关资源
    最近更新 更多