相关疑难解决方法(0)

Java枚举与具有公共静态最终字段的类相比有什么优势?

我对C#非常熟悉,但开始在Java中工作更多.我希望得知Java中的枚举基本上与C#中的枚举相同,但显然情况并非如此.最初,我很高兴得知Java枚举可能包含多个数据,这似乎非常有利(http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html).但是,从那时起我发现C#中缺少许多功能,例如能够轻松地为枚举元素分配特定值,以及因此无需花费大量精力就能将整数转换为枚举(即整数值转换为相匹配的Java枚举).

所以我的问题是:对于带有一堆公共静态最终字段的类,Java枚举是否有任何好处?或者它只提供更紧凑的语法?

编辑:让我更清楚.Java枚举对于具有相同类型的一组公共静态最终字段类有什么好处?例如,在第一个链接的行星示例中,枚举对具有这些公共常量的类有什么好处:

public static final Planet MERCURY = new Planet(3.303e+23, 2.4397e6);
public static final Planet VENUS = new Planet(4.869e+24, 6.0518e6);
public static final Planet EARTH = new Planet(5.976e+24, 6.37814e6);
public static final Planet MARS = new Planet(6.421e+23, 3.3972e6);
public static final Planet JUPITER = new Planet(1.9e+27, 7.1492e7);
public static final Planet SATURN = new Planet(5.688e+26, 6.0268e7);
public static final Planet URANUS = new Planet(8.686e+25, 2.5559e7);
public static final Planet NEPTUNE = …
Run Code Online (Sandbox Code Playgroud)

java enums

134
推荐指数
10
解决办法
11万
查看次数

如何启用枚举继承

我正在编写一个库,它具有一组预定义的枚举值.比方说,我的枚举如下所示.

public enum EnumClass {
    FIRST("first"),
    SECOND("second"),
    THIRD("third");

    private String httpMethodType;

}
Run Code Online (Sandbox Code Playgroud)

现在,使用此库的客户端可能需要添加更多值.比方说,客户端需要添加CUSTOM_FIRSTCUSTOM_SECOND.这不会覆盖任何现有值,但会使枚举具有5个值.

在此之后,我应该可以使用类似的东西<? extends EnumClass>,有5种不变的可能性.

实现这一目标的最佳方法是什么?

java inheritance enums

37
推荐指数
3
解决办法
4万
查看次数

何时在Java中使用Enum或Collection

在什么情况下枚举更适合比例如保证独特元素的集合(java.util.Set的实现者,我猜......)?

(这是我之前的问题的后续跟进)

java enums set

24
推荐指数
2
解决办法
2万
查看次数

在运行时从web.config获取枚举值

我有一个枚举,我想在运行时从web.config获取.我开始阅读有关构建提供程序的内容,但这似乎适用于类.有人能指出我的一个例子,或者至少指出我正确的方向.

现在我在web.config中有一个逗号分隔的值列表,这不是类型安全的,容易出错.

如果有另一种方法可以获得这种"动态枚举",我会对其他想法持开放态度.

谢谢!

c# asp.net

20
推荐指数
1
解决办法
1万
查看次数

有没有办法强制你在Java中切换枚举的所有定义值?

假设你有一个包含3个值的枚举:

enum Colors { RED, GREEN, BLUE }
Run Code Online (Sandbox Code Playgroud)

你在某种方法中切换它的所有值,认为你已经处理了所有情况:

switch (colors) {
    case RED: ...
    case GREEN: ...
    case BLUE: ...
}
Run Code Online (Sandbox Code Playgroud)

然后,您在枚举中添加一个新值:

enum Colors { RED, GREEN, BLUE, YELLOW }
Run Code Online (Sandbox Code Playgroud)

除了你在方法中默默地错过一个案例之外,一切仍然编译得很好YELLOW.有没有办法在这种情况下引发编译时错误?


编辑:不明白为什么这被标记为欺骗我可以在Java中添加和删除运行时枚举的元素.由于答案是"否",这意味着应该可以在编译时知道枚举的所有值,因此我要求编译器/某些代码分析工具可以实现, ?

java enums switch-statement

6
推荐指数
2
解决办法
103
查看次数

在运行时Java中更改枚举

有什么方法可以向Java中的内置枚举类添加元素?

我的问题类似于Java能否在运行时添加和删除枚举元素,但该问题似乎旨在构建自己的枚举,然后对其进行修改。我假设存在无法更改的现有枚举,例如

enum Days{ MONDAY, TUESDAY, WEDNESDAY }
Run Code Online (Sandbox Code Playgroud)

我想在此添加星期四,星期五等。因此,不幸的是,关于如何使用接口来实现我的目标的建议,或比枚举更有效的其他方法的建议,在这里不适用。

据我了解,枚举是隐式最终的,因此无法扩展它并向其中添加更多元素。它具有专用字段,但看来我可以使用反射来访问这些字段-即使我不能添加一个新的专用字段,也可以更改一个专用字段,例如,将星期一更改为星期四?

编辑:澄清情况

人们建议在将代码编译到程序中之前先对其进行更改。我的代码是我无法更改的更大项目的一部分;包含枚举的类由较大的程序加载,然后我的类才能访问它。到那时,我想将缺少的元素添加到枚举中。字节码操作仍然是要走的路吗?

java enums runtime

3
推荐指数
2
解决办法
4283
查看次数

如何使java枚举元素可配置

你好,我不确定标题是否足够描述.我的意思是创建一个这样的枚举

public enum Test{
  ONE, TWO ,THREE
}
Run Code Online (Sandbox Code Playgroud)

这看起来像硬编码.如果由于某种原因我需要添加四个某些业务规则的演变原因.我应该编码并再次部署它吗?是不是让它从文件,例如spring配置或属性文件中选择元素的方法?谢谢阅读.

java enums spring

2
推荐指数
1
解决办法
1422
查看次数

标签 统计

enums ×6

java ×6

asp.net ×1

c# ×1

inheritance ×1

runtime ×1

set ×1

spring ×1

switch-statement ×1