与.NET相比,我在Java方面没有太多经验.在.NET中,枚举被视为整数的精简包装,因此您可以轻松创建未命名的枚举值.例如:
// C# code
public enum Colors { Red, Green, Blue }
Console.Writeline(Colors.Red + " " + Colors.Green + " " + Colors.Blue); // Red Green Blue
var unknown = (Colors)(-1);
Console.WriteLine(unknown); // -1
在Java中可以做同样的事情吗?
编辑:这似乎是由于以下事实而导致的:这段代码不会编译:
// Java code
enum Colors { R, G, B }
static int f(Colors c) {
switch (c) {
case R: return 1;
case G: return 2;
case B: return 3;
} // Compiler complains about a missing return statement
}
最佳答案
Java实现的枚举与C#有所不同:与其使它们成为int上的精简包装,不如使它们成为围绕对象(compiler-aided improvement on the type-safe enum
pattern)的薄包装.
编译器确保无法创建该类型不包含的枚举实例.
每种方法都有优点和缺点. C#与C和C枚举保持更近的距离,它们的行为类似于命名数字常量的集合.这样就可以创建[Flag]枚举-Java枚举无法实现.
另一方面,Java枚举是完全起作用的对象,具有自己的方法,并且具有实现接口的能力.可以将方法作为扩展添加到C#枚举中,但是无法实现接口.
Inm小程序商店
Inm小程序商店收录了最新,最热门的微信小程序和微信小游戏,是国内内容最丰富的集小程序游戏、小程序分发、小程序推广为一体的综合性小程序门户网站之一。
Vultr中文网
最低 $2.5/月 的VPS, 稳定, 可靠