如何对保证具有该方法的对象的超类进行方法调用?

  • 本文关键字:方法 超类 对象 调用 java
  • 更新时间 :
  • 英文 :


我有一个处理一组对象的API,所有对象都扩展了一个没有收入字段的特定类

class Person { ... }

假设我想打个电话获得收入。并非这里的所有子类都有收入字段

class Child { ... }
class FullTimeEmployedPerson { ... }
class TrustFundKid { ... }

此过程将对后两者中的任何一个调用#getIncome()方法。现在,我的 API 保证永远不会将Child传递给它,所以我想跳过寒暄,只是拥有类似的东西

String getParsedIncome(Person person) { 
return FooBar.parse(person.getIncome());
}

对此的现实方法是什么?

Person中定义getIncome(),抛出UnsupportedOperationException。在支持返回收入的子类中覆盖它。

您说可以保证仅访问支持的字段。此方法放弃编译时检查以确保这是真的。另一种方法是创建一个接口,IncomeHolder,并仅在实际有收入的Person子类中实现它。然后编译器可以保证没有无效用法。

您必须使用反射来检查您的实例类是否具有此类方法。

If(YourChildInstance.class.getMethod("methodName") != null){ ... }else{ do nothing}

我不是 100% 确定它有效。测试它,让我知道它是否可以

最新更新