【问题标题】:How do you use the variables from an enum in another class?您如何在另一个类中使用枚举中的变量?
【发布时间】:2017-01-30 05:19:56
【问题描述】:

我对枚举非常陌生,对编程只有初步的了解。我最近发现了枚举,并相信它们是解决我的一些问题的完美解决方案,但在如何将它们合并到我的代码中需要一些帮助。

我首先创建了一个枚举类。现在我正在为我的枚举使用 7 个常量,每个常量都有 1 个字符串变量来描述(?)它。我该如何编码?更重要的是,我如何从另一个类访问它?例如,我想打印与常量相关的字符串,该常量是我的枚举的当前值。请帮忙。这对我来说真的很难描述,所以希望你们知道我要问的是什么。

【问题讨论】:

标签: java printing enums constants enumeration


【解决方案1】:

official tutorial 已经涵盖了这一点

public enum Animal {
  COW("moo"),  // <== calls constructor with any enum specific data
  HORSE("neigh"),
  SHEEP("ba ba");

  private final String noise; // stores the data

  private Animal(String noise) {  // <== private constuctor
      this.noise = noise;
  }

  public String getNoise() {  // <== allow access to the data
      return noise;
  }
}

从另一个类访问

Animal animal = Animal.COW;
System.out.println(animal.getNoise());

【讨论】:

  • noise 应该是final。
  • 但是如果不指定 COW,您将如何做到这一点?给定枚举的任何给定值,如何打印相应的动物声音?
  • 还有私有构造函数在这里起到什么作用?
  • "注意:枚举类型的构造函数必须是包私有或私有访问。它会自动创建在枚举体开头定义的常量。您不能自己调用​​枚举构造函数。 "来自我回答中的官方链接...
  • 您可以对任何 Animal 类型的变量调用 getNoise (),就像给定类的普通实例一样。我已经更新了答案以显示这一点
【解决方案2】:

枚举常量会覆盖toString 方法,因此默认情况下它将常量名称作为字符串返回。您甚至可以进一步覆盖它。

Javadocs 是您的朋友:http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#toString--。

你也可以经常直接使用枚举常量本身。

public enum Rainbow {
  RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET;
}

使用一种方式:

Rainbow rainbow = findRainbow();
switch (rainbow) {
  case RED:
    rosso();
    break;
  case YELLOW:
    giallo();
    break;
  . . .
  case VIOLET:
    viola();
    break;
}

等等

此外,枚举是类,您可以为它们提供更多方法,甚至为每个枚举常量覆盖不同的方法。就像 Java 已经对 toString 所做的那样。

@shmosel 已经给出了枚举教程的链接。

【讨论】:

    【解决方案3】:

    要声明一个枚举,请按照这个语法Colors("RED", "BLUE")

    要访问枚举类,请将其声明为公共类。如果该类在另一个包中,则将该类导入到引用这些枚举的类中。

    【讨论】:

      【解决方案4】:

      很抱歉我说让它静态

      公开。以便可以从该类导入到的任何类中访问它。

      从不同的班级制作类似的东西

      public class DifferentClass
      {
          public enum reportType
          {
              firstReport = 1,
              secondReport = 2
          }
      }
      

      导入该类并像 System.out.println("Report type : " + reportType.firstReport); 一样访问它

      【讨论】:

      • 做什么public static?实际上,枚举常量已经存在。只有常量和某些实用方法应该是public static。否则,这种模式通常会引起麻烦。您的解释不清楚“它”应该是什么。如果您的意思是一个变量来保存枚举值,那么几乎不可能需要任何超出本地的范围。请详细说明您的建议如何解决 OP 的问题。
      • 我建议在这个例子中,枚举应该是一个顶级类,并且它的名字应该符合 Java 命名约定。另外,您是否尝试过编译代码?因为它有错误。
      猜你喜欢
      • 2018-04-14
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多