【问题标题】:How can I implement a class when one of its properties is an enum variable?当一个类的属性之一是枚举变量时,如何实现一个类?
【发布时间】:2020-04-01 04:37:26
【问题描述】:

我想用state 属性创建Node 对象。 state 属性可以确定为三个枚举变量之一:enum State = {visited, unvisited, visiting};

因此,例如,我想做Node n1; n1.state = State.unvisited; 在这种情况下,n1Graph 对象中的 Node 对象。为此,我需要创建一个Node 类。 state 属性的类型应该是什么?

class Node {
    [type] state;
    public Node() {
        // say something about the state
    }
}

【问题讨论】:

    标签: java oop enums


    【解决方案1】:

    您可以按如下方式创建enum

    enum State {
      Visited,
      Unvisited,
      Visiting    
    }
    

    完成后,您可以按如下方式定义您的属性:

    State state;
    

    【讨论】:

    • 谢谢@Sujeet Sinha。我也应该将State 创建为一个类吗?
    • 不,一旦您创建了enum,您就可以使用与属性类型相同的名称。 enum 应该在类之外定义。
    【解决方案2】:

    state 属性的类型应该是什么?

    State

    【讨论】:

      【解决方案3】:

      您可以在类外定义枚举,然后在类内创建该枚举的实例,如下所示。

      enum State {
        Visited,
        Unvisited,
        Visiting    
      }
      class Node {
          State state;
          public Node() {
              // say something about the state
          }
      }
      

      【讨论】:

        【解决方案4】:

        创建一个枚举数据类型:

        public enum State {
          VISITED,
          UNVISITED,
          VISITING    
        }
        

        那么你的类应该是这样的:

        class Node {
            State state;
            public Node() {
                // say something about the state
            }
        }
        

        您的类的实例如下所示:

        Node node1, node2;
        node1 = new Node();
        node2 = new Node();
        node1.state = State.VISITED;
        node2.state = State.UNVISITED;
        

        更多阅读请查看link,或谷歌enumerations,您会找到更多信息。

        【讨论】:

          【解决方案5】:

          看起来像这样:
          (我已将名称更改为大写,因为这是枚举的约定)

          要引用它们,您可以将 State.VISITED 编码为 import packagename.State;
          或者只是 UNVISITEDimport static packagename.State.*;

          public class Enum60963806 {
          
              public static enum State {
                    VISITED,
                  UNVISITED,
                    VISITING;
              }
              public static final class Node {
          
                  private final State state;
          
                  public Node(final State state) {
                      this.state = state;
                  }
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2020-04-07
            • 2015-08-21
            • 1970-01-01
            • 2011-08-25
            • 1970-01-01
            • 2015-08-22
            • 1970-01-01
            • 2018-04-10
            • 1970-01-01
            相关资源
            最近更新 更多