当前位置: 首页 > 面试题库 >

我可以在Java枚举中添加函数吗?

景靖琪
2023-03-14
问题内容

我有一个枚举,看起来像

public enum Animal {
  ELEPHANT,
  GIRAFFE,
  TURTLE,
  SNAKE,
  FROG
}

我想做类似的事情

Animal frog = Animal.FROG;
Animal snake = Animal.SNAKE;

boolean isFrogAmphibian = frog.isAmphibian(); //true
boolean isSnakeAmphibian = snake.isAmphibian(); //false

boolean isFrogReptile = frog.isReptile(); //false
boolean isSnakeReptile = snake.isReptile(); //true

boolean isFrogMammal = frog.isMammal(); //false
boolean isSnakeMammal = snake.isMammal(); //false

我出于教学目的简化了该示例,但是对于我的实际示例而言,这对我真的很有用。我可以用Java做到吗?


问题答案:

是的Enum是Java中的类:

public enum Animal 
{
  ELEPHANT(true),
  GIRAFFE(true),
  TURTLE(false),
  SNAKE(false),
  FROG(false);

  private final boolean mammal; 
  private Animal(final boolean mammal) { this.mammal = mammal; }
  public boolean isMammal() { return this.mammal; }
}

但是在您的真实系统中,由于有固定类型的动物,我也将其设为Enum。

public enum Type
{
  AMPHIBIAN,
  MAMMAL,
  REPTILE,
  BIRD
}

public enum Animal 
{
  ELEPHANT(Type.MAMMAL),
  GIRAFFE(Type.MAMMAL),
  TURTLE(Type.REPTILE),
  SNAKE(Type.REPTILE),
  FROG(Type.AMPHIBIAN);

  private final Type type; 
  private Animal(final Type type) { this.type = type; }
  public boolean isMammal() { return this.type == Type.MAMMAL; }
  public boolean isAmphibian() { return this.type == Type.AMPHIBIAN; }
  public boolean isReptile() { return this.type == Type.REPTILE; }
  // etc...
}

还要注意,使任何实例变量也很重要final

您可以在Java Language
Specification中
找到有关它的更多详细信息。



 类似资料:
  • 问题内容: 该方法返回枚举实例的序数。 如何设置枚举的序数? 问题答案: 您无法设定。它始终是常量定义的序数。请参阅Enum.ordinal()的文档: 返回此枚举常量的序数(其在枚举声明中的位置,其中初始常量的序数为零)。大多数程序员都不会使用这种方法。它设计用于复杂的基于枚举的数据结构,例如EnumSet和EnumMap。 实际上-您不需要。如果要一些整数属性,请定义一个。

  • 问题内容: 是否可以在运行时从Java枚举中添加和删除元素? 例如,我可以从文件中读取枚举的标签和构造函数参数吗? 问题答案: 不,枚举应该是完整的静态枚举。 在编译时,你可能希望从某种形式的另一个源文件生成enum 文件。你甚至可以创建这样的文件。 在某些情况下,你可能需要一组标准值,但允许扩展。常用的方法是为接口提供一个为标准值实现一个。当然,当你仅引用时,你将失去的能力。

  • 问题内容: 是否可以在Java枚举中使用,还是需要使用?在我的测试中,它始终有效,但是我不确定是否可以保证。特别是,在枚举上没有方法,因此我不知道是否有可能获得一个枚举,该枚举将返回不同于的值。 例如,这样可以吗: 还是我需要这样写: 问题答案: 仅需2美分:这是Sun发布的Enum.java的代码,并且是JDK的一部分:

  • 问题内容: 我使用枚举来使一些常量: OPEN值为零,但我希望它为100。可能吗? 问题答案: Java枚举不同于C或C ++枚举,它们实际上只是整数的标签。 Java枚举的实现更像类-甚至可以具有多个属性。 最大的区别是它们是 类型安全的 ,这意味着您不必担心将COLOR枚举分配给SIZE变量。 有关更多信息,请参见http://docs.oracle.com/javase/tutorial/j

  • 问题内容: 只是在玩,并想出了一个甜蜜的方法来使用此方法在JavaEnum toString()方法中向s 添加功能。 一些进一步的修改使我 几乎 也可以添加整洁的(即不引发异常)反向查找,但是存在问题。报告: 有办法吗? 这里的目的是(通过一个接口实现,使用像我在链接的答案中添加的方法一样)静默地添加一个在不引发异常的情况下执行该功能的方法。可能吗?现在显然可以扩展- 到目前为止,我的主要Jav

  • 问题内容: 我想采用一个现有的枚举,并向其添加更多元素,如下所示: 这在Java中可行吗? 问题答案: 不,你无法使用Java执行此操作。除了别的什么,d大概就是A(扩展的“正常”想法)的一个实例,但是只知道这一点的用户却一无所知-这违背了枚举作为一组众所周知的集合的观点。价值观。 如果你可以告诉我们更多有关如何使用它的信息,我们可能会建议其他解决方案。