如何判断Java类C中成员变量的实现类是A还是B?
问题解决:判断接口成员的具体实现类
你当前的写法有两处问题:
- 语法错误:
A.Class应该写成A.class(class是关键字,需小写); - 逻辑错误:
isInstance()方法的参数应该是要判断的对象,而非 Class 对象,你把判断逻辑搞反了,而且传入 Class 对象永远不会返回 true——因为 Class 实例本身不是 A 的对象。
下面提供几种正确的实现方式:
方式一:使用 instanceof 关键字(推荐)
这是最简洁直观的写法,能判断对象是否为 A 或其子类的实例:
public boolean test(C c) { // 先判空避免空指针异常 if (c.getI() == null) { return false; } return c.getI() instanceof A; }
方式二:使用 Class.isInstance() 方法
和 instanceof 效果一致,适合需要动态指定判断类的场景:
public boolean test(C c) { I i = c.getI(); return i != null && A.class.isInstance(i); }
方式三:严格判断为 A 类(排除子类)
如果需要确保对象是 A 的直接实例,而非其子类,用 getClass() 对比:
public boolean test(C c) { I i = c.getI(); return i != null && A.class.equals(i.getClass()); }
内容的提问来源于stack exchange,提问作者user4202236
相关产品推荐
相关产品推荐

