显然,您可以跳过这些新界面,并使用更好的名称来命名自己的界面。但是,有一些注意事项:
- 除非您的自定义接口扩展了内置组件之一,否则您将无法在其他JDK API中使用自定义接口。
- 如果您总是自己动手,那么在某些时候您会遇到无法想到好名声的情况。例如,我认为这
CheckPerson
并不是一个好名字,尽管这是主观的。
大多数内置接口还定义了其他一些API。例如,
Predicate定义
or(Predicate),
and(Predicate)和
negate()。
Function定义
andThen(Function)和
compose(Function),等等。
直到它不是特别令人兴奋:在函数上使用抽象方法以外的方法可以简化组合,策略选择等等,例如(使用本文建议的样式):
之前:
class PersonPredicate { public Predicate<Person> isAdultMale() { return p -> p.getAge() > ADULT && p.getSex() == SexEnum.MALE; }}可能会变成这样,最终更可重用:
class PersonPredicate { public Predicate<Person> isAdultMale() { return isAdult().and(isMale()); } publci Predicate<Person> isAdultFemale() { return isAdult().and(isFemale()); } public Predicate<Person> isAdult() { return p -> p.getAge() > ADULT; } public Predicate<Person> isMale() { return isSex(SexEnum.MALE); } public Predicate<Person> isFemale() { return isSex(SexEnum.FEMALE); } public Predicate<Person> isSex(SexEnum sex) { return p -> p.getSex() == sex; }}


