我有一个处理一组对象的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% 确定它有效。测试它,让我知道它是否可以