【发布时间】:2020-01-03 00:23:30
【问题描述】:
我有一个 API 可以处理一组对象,这些对象都扩展了一个没有收入字段的特定类
class Person { ... }
假设我想打电话获取收入。并非这里所有的子类都有收入字段
class Child { ... }
class FullTimeEmployedPerson { ... }
class TrustFundKid { ... }
此过程将在后两者中的任何一个上调用#getIncome() 方法。现在,我的 API 保证永远不会收到 Child 传递给它,所以我想跳过寒暄,简单地拥有类似的东西
String getParsedIncome(Person person) {
return FooBar.parse(person.getIncome());
}
对此有什么现实的方法?
【问题讨论】:
-
你能不能改变课程?听起来您可以,但听起来也像是来自 3rd 方库(因此您无法更改它们)。请edit您的问题包括从
Person扩展的所有类。 -
你在说什么样的 API? (我认为您的意思是 REST + json)您可以使用 default method
Optional<T> getIncome()定义接口。你的类都实现了接口,但实际上只有FullTimeEmployedPerson和TrustFundKid返回非空对象。 -
Person 类是这里的一个假设示例,我实际上无法包含几十年前遗留应用程序的所有子类,而且它对这个问题没有更多帮助。我没有接触到所涉及的类,我的 API 根据规范将它们映射到不同的对象(变化太频繁)
-
对于duck typing Java isn't ideal。
-
@VictorS stackoverflow.com/questions/3935832/… 怎么样?这模拟了 C# 中的
dynamic关键字。
标签: java