Tag: 枚举

Java使用enum与switch语句

我已经看过类似于这个问题的各种问答,但还没有find解决办法。 我所拥有的是一个枚举,它代表观看电视指南的不同方式。 在NDroid Application类中 static enum guideView { GUIDE_VIEW_SEVEN_DAY, GUIDE_VIEW_NOW_SHOWING, GUIDE_VIEW_ALL_TIMESLOTS } …当用户改变视图的事件处理程序从0-2收到一个int ,我想做这样的事情… 在一个Android Activity onClick(DialogInterface dialog, int which)事件处理程序 // 'which' is an int from 0-2 switch (which) { case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY: … break; } 我习惯于C#枚举和select/ case语句,这将允许上面的东西,我知道Java做不同的事情,但我只是无法理解我需要做什么。 我将不得不诉诸if陈述? 有可能只有3个select,所以我可以做到这一点,但我想知道如何用Java中的开关箱来完成。 编辑抱歉,我没有完全展开这个问题,因为我把它看作是一个普通的Java问题。 我已经join了这个问题来进一步解释。 没有什么特定于Android的东西,这就是为什么我没有把它标记为Android,但是枚举是在Application类中定义的,而且我不希望交换机的代码在Activity 。 枚举是静态的,因为我需要从多个活动访问它。

将枚举绑定到WinFormscombobox,然后进行设置

很多人已经回答了如何将枚举绑定到WinForms中的combobox的问题。 就像这样: comboBox1.DataSource = Enum.GetValues(typeof(MyEnum)); 但是,如果不能设置显示的实际值,那就没用了。 我努力了: comboBox1.SelectedItem = MyEnum.Something; // Does not work. SelectedItem remains null 我也试过了: comboBox1.SelectedIndex = Convert.ToInt32(MyEnum.Something); // ArgumentOutOfRangeException, SelectedIndex remains -1 有没有人有任何想法如何做到这一点?

是否可以在Java中使用==枚举?

可以在Java中使用==枚举,还是需要使用.equals() ? 在我的testing中, ==总是起作用,但我不确定是否能保证。 特别是,在枚举上没有.clone()方法,所以我不知道是否有可能得到一个枚举,其中.equals()会返回一个不同于==值。 例如,这是OK的: public int round(RoundingMode roundingMode) { if(roundingMode == RoundingMode.HALF_UP) { //do something } else if (roundingMode == RoundingMode.HALF_EVEN) { //do something } //etc } 或者我需要这样写: public int round(RoundingMode roundingMode) { if(roundingMode.equals(RoundingMode.HALF_UP)) { //do something } else if (roundingMode.equals(RoundingMode.HALF_EVEN)) { //do something } //etc }

在析构函数中的奇怪的枚举

目前,我正在阅读Protocol Buffer的源代码,我发现这里定义了一个奇怪的enum代码 ~scoped_ptr() { enum { type_must_be_complete = sizeof(C) }; delete ptr_; } void reset(C* p = NULL) { if (p != ptr_) { enum { type_must_be_complete = sizeof(C) }; delete ptr_; ptr_ = p; } } 为什么enum { type_must_be_complete = sizeof(C) }; 在这里定义? 它是干什么用的?

enum.values() – 是确定性返回枚举的顺序

我有一个枚举SOME_ENUM : public enum SOME_ENUM { EN_ONE, EN_TWO, EN_THREE; } SOME_ENUM.values()总是按照枚举声明的顺序返回枚举: EN_ONE, EN_TWO, EN_THREE ? 这是一个规则还是不能保证在下一个JDK版本中不会更改?

在Java枚举中覆盖valueof()和toString()

在我的enum值是需要有空格的单词,但枚举不能在他们的价值空间,所以它都成了。 我想重写toString()来添加这些空间,我告诉它。 我也希望枚举提供正确的枚举,当我使用valueOf()在我添加空格相同的string。 例如: public enum RandomEnum { StartHere, StopHere } 对值为StartHere调用toString()将返回string"Start Here" 。 在同一个string( "Start Here" )上StartHere ()将返回枚举值StartHere 。 我怎样才能做到这一点?

.NET库中是否有预定义的月份枚举?

我正在查看在.net框架中是否有几个月的官方枚举。 我似乎有可能有一个,因为月份的使用有多普遍,而且.net框架中还有其他这样的枚举。 例如,本周的date是System.DayOfWeek,包括星期一,星期二等。 我想知道是否有一个月的一年,即一月,二月等? 有人知道吗?

Java:检查枚举是否包含给定的string?

这是我的问题…我正在寻找(如果它甚至存在)ArrayList.contains();的枚举等价物。 以下是我的代码问题的示例: enum choices {a1, a2, b1, b2}; if(choices.???(a1)}{ //do this } 现在,我意识到一个String的ArrayList将是更好的路线,但是我必须通过其他地方的switch / case来运行我的枚举内容。 因此我的问题。 假设这样的事情不存在,我怎么去做呢? 谢谢!

C#的枚举和匹配属性的命名约定

我经常发现自己实现了一个类,把某种自己的状态属性作为一个枚举:我有一个Status枚举和一个状态types的Status属性。 我应该如何解决这个名称冲突? public class Car { public enum Status { Off, Starting, Moving }; Status status = Status.Off; public Status Status // <===== Won't compile ===== { get { return status; } set { status = value; DoSomething(); } } } 如果状态枚举对于不同types是通用的,我会把它放在课堂外面,问题就解决了。 但状态只适用于汽车,因此在课堂外申报枚举是没有意义的。 你在这种情况下使用什么命名约定? 注:这个问题在回答这个问题的意见中部分辩论过。 由于这不是主要问题,所以没有得到太多的知名度。 编辑:菲利普Ekbergbuild议国际海事组织优秀的解决scheme,为'状态'的具体情况。 不过,如果你想知道枚举/属性名称不同的解决scheme,那么我会很有兴趣的,正如Michael Prewecki的回答 。 EDIT2(2010年5月):我最喜欢的解决scheme是复用枚举types名称,如Chris S.所build议。根据MS指南,这应该只用于标志枚举。 但是我越来越喜欢它了。 我现在也用它来定期枚举。

枚举types的命名空间 – 最佳实践

通常需要几个枚举types。 有时候,有一个名字冲突。 想到这两个解决scheme:使用一个名称空间,或使用“更大的”枚举元素名称。 尽pipe如此,命名空间解决scheme有两个可能的实现:一个嵌套枚举的虚拟类,或者一个完整的命名空间。 我正在寻找所有三种方法的优点和缺点。 例: // oft seen hand-crafted name clash solution enum eColors { cRed, cColorBlue, cGreen, cYellow, cColorsEnd }; enum eFeelings { cAngry, cFeelingBlue, cHappy, cFeelingsEnd }; void setPenColor( const eColors c ) { switch (c) { default: assert(false); break; case cRed: //… break; case cColorBlue: //… //… } } // (ab)using […]