可以像Java在.NET中一样创建未定义的枚举值吗?

与.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, 稳定, 可靠

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值