Checkstyle:方法不是为扩展而设计的,但它需要

时间:2014-05-01 12:15:37

标签: java inheritance checkstyle

我有两个课程:StudentUserUser类扩展Student,并且它们都实现了一个公共接口,该接口定义了checkSelf()方法。此方法检查对象的状态是否有效,并在数据库中执行更新或插入之前调用。

我在数据库中插入了学生和用户,这使得在两种情况下都可以从课外调用此方法。这就是this post中找到的解决方案似乎不适用于我的问题的原因。也许我错过了一些东西。

基本上,现在的方式,两个checkSelf()方法都是公共的,User类中的方法在进行自己的检查之前从其父(Student)调用一个方法。

我怎么能解决这个问题,所以我有干净的代码?

1 个答案:

答案 0 :(得分:4)

我个人并不同意这条规则(恕我直言,比使用更令人头疼),但你提到的问题的答案给出了一个相当好的指示,表明你能做些什么。

  • 使checkSelf()方法最终
  • checkSelfEx()中创建一个空的受保护Student方法,该方法被称为checkSelf()的最后一步
  • 在用户中实施checkSelfEx()使其成为最终版。

这保证了在调用方法时始终执行checkSelf()中执行的检查(因此不可能通过子类中断合同)。当然问题在于命名,就好像你想在User的子类中有更多逻辑一样,你需要checkSelfExEx()。如果所有这些检查都可以用更好的名称进行分组,那么至少可以阅读,但是将很多最终方法暴露给子类并不是一件好事。