我不得不说,我不明白斯卡拉枚举类。 我可以从文档中复制粘贴示例,但我不知道发生了什么。 object WeekDay extends Enumeration { type WeekDay = Value val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value } import WeekDay._ 什么意思type WeekDay = Value ,为什么我必须写这个? 为什么val Mon = Value ? 那有什么意思? 为什么我必须导入WeekDay对象? 和, 当我写val day = WeekDay.Mon ,为什么键入WeekDay.Value ,而不是typesWeekDay ?
我的一位同事说布尔人作为方法论点是不可接受的 。 它们应由枚举取代。 起初我没有看到任何好处,但他给了我一个例子。 什么更容易理解? file.writeData( data, true ); 要么 enum WriteMode { Append, Overwrite }; file.writeData( data, Append ); 现在我懂了! 😉 这绝对是一个枚举作为第二个参数使得代码更具可读性的例子。 那么,你对这个话题有什么看法呢?
如果你看方法name()的枚举api它说: 返回此枚举常量的名称,与其枚举声明中声明的完全相同。 大多数程序员应该优先使用toString方法,因为toString方法可能会返回一个用户友好的名称。 此方法主要用于特殊情况下,正确性取决于获取确切的名称,从发行版到发行版不会有所不同。 为什么最好使用toString() ? 我的意思是,当name()已经是final时,toString可能会被覆盖。 所以,如果你使用toString,而有人重写它以返回一个硬编码的值,那么你的整个应用程序就closures了。另外,如果你查看源代码,toString()方法返回的就是这个名字。 这是同一件事。
在后面的Enum ToString中 ,描述了一个方法使用自定义属性DescriptionAttribute如下所示: Enum HowNice { [Description("Really Nice")] ReallyNice, [Description("Kinda Nice")] SortOfNice, [Description("Not Nice At All")] NotNice } 然后,你调用GetDescription函数,使用如下语法: GetDescription<HowNice>(NotNice); // Returns "Not Nice At All" 但是,这并不能真正帮助我,因为我不能强制ComboBox调用GetDescription ,所以我只想用一个枚举的值填充ComboBox 。 我想要的有以下要求: 读取(HowNice)myComboBox.selectedItem将返回选定的值作为枚举值。 用户应该看到用户友好的显示string,而不仅仅是枚举值的名称。 因此,用户不会看到“ NotNice ”,而会看到“ Not Nice At All ”。 希望解决scheme只需要对现有枚举进行最less的代码更改。 显然,我可以为我创build的每个枚举实现一个新的类,并覆盖它的ToString() ,但是对于每个枚举来说这是很多工作,我宁愿避免这样做。 有任何想法吗? 哎呀,我甚至会抛出一个慷慨的拥抱 🙂
我使用枚举做一些常量: enum ids {OPEN, CLOSE}; OPEN值是零,但我想它为100.是否有可能?
我有一个使用枚举的类,枚举目前在它自己的文件,这似乎是浪费。 什么是关于枚举的一般意见被放在文件的命名空间,他们被消耗? 还是应该枚举真的生活在自己的CS文件? 编辑 我应该提到,虽然有问题的类使用这些枚举,但外部调用者也使用这些枚举。 换句话说,另一个类可以设置这些枚举。 所以他们不是在课堂上内部使用,否则这个问题将是一个明智之举。
我刚刚发现Java允许枚举实现一个接口。 这将是一个很好的用例呢?
我已经多年没有编写任何C ++,现在我正试图回到它。 然后我跑过去,想着放弃: typedef enum TokenType { blah1 = 0x00000000, blah2 = 0X01000000, blah3 = 0X02000000 } TokenType; 这是什么? 为什么在这里使用typedef关键字? 为什么名称TokenType在这个声明中出现两次? 语义如何不同于这个: enum TokenType { blah1 = 0x00000000, blah2=0x01000000, blah3=0x02000000 };
首先我要说的是,我更熟悉C#中的枚举,看起来像java中的枚举相当混乱。 正如你所看到的,我试图在下一个例子中使用switch语句@enums,但是无论我在做什么,我都会得到一个错误。 我收到的错误是: 合格的案例标签SomeClass.AnotherClass.MyEnum.VALUE_A必须replace为不合格的枚举常量VALUE_A 事情是我很理解错误,但我不能只写VALUE_A,因为枚举位于另一个子类。 有没有办法解决这个问题? 为什么它发生在Java? //Main Class public class SomeClass { //Sub-Class public static class AnotherClass { public enum MyEnum { VALUE_A, VALUE_B } public MyEnum myEnum; } public void someMethod() { MyEnum enumExample //… switch (enumExample) { case AnotherClass.MyEnum.VALUE_A: { <– error on this line //.. break; } } } }
考虑: using System; public class Test { enum State : sbyte { OK = 0, BUG = -1 } static void Main(string[] args) { var s = new State[1, 1]; s[0, 0] = State.BUG; State a = s[0, 0]; Console.WriteLine(a == s[0, 0]); // False } } 这怎么解释? 它在运行在x86 JIT中的Visual Studio 2015中的debugging版本中发生。 在x64 JIT中生成或运行的发行版按预期打印为True。 从命令行重现: […]