使用枚举扩展类 - java



假设我有两个类A和B,它们的内部状态由枚举状态表示。类 B 扩展 A 以添加新功能,但它也添加新的内部状态。准确地说,它通过将 A 的一个状态划分为两个新状态来添加细粒度的状态支持。

我还需要使用 PropertyChangeSupport 来监视状态更改。

目前,我在枚举状态的 A 类中定义了所有状态。我有保护的方法setState()和getState()。为了从外部检查状态,我编写了方法isAvaible(),isComplete()等。这些方法仅存在于适当的类中,具体取决于其层次结构和状态支持。

我真的不喜欢这个想法,在父类中定义所有状态。如何在 Java 中正确实现这一点?据我所知,不可能将继承与枚举一起使用。

委派优先于继承。

enum StateA
{
       AVAILABLE , COMPLETE ;
}
class A
{
      private StateA state ;
}
enum StateB
{
     AVAILABLE_TO_PUBLIC ( StateA . AVAILABLE ) , AVAILABLE_INTERNALLY ( StateA . AVAILABLE ) , COMPLETE ( COMPLETE ) ;
     StateB ( StateA sa )
     {
          this . sa = sa ;
     }
     private StateA sa ;
}
class B
{
      private StateB state ;
}

我认为你想放弃枚举概念,除非作为A类的私人东西来帮助你编程。 A 的外部状态可通过 isAvailable() 和 isComplete() 等方法获得。 类 B 将扩展 A,但应该不知道 A 的枚举,尽管它可能有自己的私有枚举。 如果更改需要影响 A 的状态,从而影响 A 的枚举 StateA,请通过方法调用进行。

A类或B类对象的"状态"应该通过其方法确定,访问,使用或任何方法,而不是通过访问枚举值。 换句话说,A 或 B 的实例本身就是状态的完整定义。 它可能不会像枚举那样命名状态,但它会告诉您有关"状态"允许和可以做什么以及如何更改它的所有信息。

或者,您可以设置一个对每个人都可见的枚举并全局定义它。 那么枚举 StateA 完全独立于 A 类,解决了基本的设计问题。 然后,A类和B类以及其他类将依赖于StateA提供它们用于相互通信的语言以及系统的其余部分,从而做出更好的设计。

我更喜欢第一个想法,因为通过调整A和B,并扩展它们,你可以真正微调每个状态的含义,甚至可以添加新的状态,而无需正式宣布。 (向独立的 StateA 添加值并不是什么大问题,但使用 StateA 的程序员可能想知道他们是否应该使用新值 - 这是一个小麻烦。

最新更新