Tag: 枚举

枚举中的元素数目

在C中,是否有一个很好的方法来跟踪枚举中的元素数量? 我见过 enum blah { FIRST, SECOND, THIRD, LAST }; 但是这只有在项目是连续的并从零开始时才有效。

尽早在Ruby中避免.each {}迭代

码: c = 0 items.each { |i| puts i.to_s # if c > 9 escape the each iteration early – and do not repeat c++ } 我想抓住前10个项目,然后离开“每个”循环。 我用什么来replace注释行? 有更好的方法吗? 更多Ruby的惯用语?

“设置”一个特定的枚举types,但generics

假设我有一个抽象类 public abstract class Trainer<T extends Animal>{} 我有特定的培训师,如: public DogTrainer extends Trainer<Dog>{} public HorseTrainer extends Trainer<Horse>{} 这些“训练者”中的每一个都有一套固定的技巧,他们可以训练动物去做,我想用Enums来做。 所以我有一个接口: public interface TrainingActions<T extends Animal>{} 在每个培训师,我有一个Enum实现这个接口。 所以: public DogTrainer extends Trainer<Dog>{ public enum Trainables implements TrainingActions<Dog>{ BARK, BITE, ROLLOVER, FETCH; } } public HorseTrainer extends Trainer<Horse>{ public enum Trainables implements TrainingActions<Horse>{ JUMP, TROT, REARUP; } } 现在在每个Trainer类中,我想要一个方法说'trainingComplete',将其中一个Enums作为input,并将其保存到一个集合中。 […]

你应该为Java枚举定义一个null / unknown值吗?

当你定义一个枚举的东西,可以在你的界面“未定义”,如果你 定义一个单独的枚举值,或 只是使用enumValue = null这些情况? 例如, serviceX.setPrice(Price priceEnum) enum Price { CHEAP, EXPENSIVE, VERRRY_EXPENSIVE, UNKNOWN } 和priceEnum.UNKNOWN需要时 要么 enum Price { CHEAP, EXPENSIVE, VERRRY_EXPENSIVE } 和priceEnum = null时需要? 对此有一点辩论。 一些想到的点: 使用Price.UNKNOWN保存一些“if(price == null)”代码。 您可以在一个开关柜中处理价格x的所有值 根据视图技术,可能更容易本地化Price.UNKNOWN 在代码中使用Price.UNKNOWNtypes的原因“幻数”问题,IMO。 这里我们有Price.UNKNOWN,其他地方可能是Color.UNDEFINED,Height.NULLVALUE等等 使用priceValue = null与Java中处理其他数据types的方式更加一致。 对于未知值,我们有Integer i = null,DomainObject x = null,String s = null,不是吗? Price.UNKNOWN强制您决定是否允许所有用例的空值。 我们可能有方法Price getPrice(),它可能会返回Price.UNKNOWN和setPrice(Price p),这是不允许接受Price.UNKNOWN的。 由于Price.UNKNOWN总是包含在枚举的值中,所以这些接口看起来有点不清洁。 […]

通过generics类中的嵌套枚举的reflection获取枚举值

我需要通过reflection来打印出某些types的枚举值和相应的parsing值。 这在大多数情况下工作正常。 但是,如果枚举在genericstypes中声明, Enum.GetValues将引发以下exception: [System.NotSupportedException: Cannot create arrays of open type. ] at System.Array.InternalCreate(Void* elementType, Int32 rank, Int32* pLengths, Int32* pLowerBounds) at System.Array.CreateInstance(Type elementType, Int32 length) at System.Array.UnsafeCreateInstance(Type elementType, Int32 length) at System.RuntimeType.GetEnumValues() 完整的复制代码: using System; public class Program { public static void Main() { var enumType= typeof(Foo<>.Bar); var underlyingType = Enum.GetUnderlyingType(enumType); Console.WriteLine(enumType.IsEnum); foreach(var value […]

垃圾收集器运行在枚举types?

根据jls§8.9.2 Enum Body Declarations 枚举声明声明一个终结器是一个编译时错误。 一个枚举types的实例可能永远不会被最终确定。 当垃圾收集器运行之前执行终结器,如果终结器不存在,这意味着enumtypes总是保持加载在内存中,并且垃圾收集器不适用于enumtypes?

我如何声明一个嵌套的枚举?

我想要声明一个嵌套的枚举,如: \\pseudocode public enum Animal { dog = 0, cat = 1 } private enum dog { bulldog = 0, greyhound = 1, husky = 3 } private enum cat { persian = 0, siamese = 1, burmese = 2 } Animal patient1 = Animal.dog.husky; 可以这样做吗?

C#如何使用开关的枚举

我无法弄清楚如何结合使用开关与枚举。 你能告诉我我做错了什么,以及如何解决? 我必须使用枚举来制作一个基本的计算器。 public enum Operator { PLUS, MINUS, MULTIPLY, DIVIDE } public double Calculate(int left, int right, Operator op) { int i = (int) op; switch(i) { case 0: { return left + right; } case 1: { return left – right; } case 2: { return left * right; } case 3: { […]

通过reflection获取枚举值

我有一个简单的枚举 public enum TestEnum { TestOne = 3, TestTwo = 4 } var testing = TestEnum.TestOne; 我想通过reflection来检索它的值(3)。 任何想法如何做到这一点?

Java:使用reflection实例化枚举

假设你有一个文本文件,如: my_setting = ON some_method = METHOD_A verbosity = DEBUG … 您希望相应地更新相应的对象: Setting my_setting = ON; Method some_method = METHOD_A; Verbosity verbosity = DEBUG; … 在哪里都是不同种类的枚举。 我想有一个通用的方式来实例化枚举值。 也就是说,在运行时使用reflection,而不用事先知道对象的枚举types。 我会想像这样的事情: for (ConfigLine line : lines) { String[] tokens = line.string.split("=", 2); String name = tokens[0].trim(); String value = tokens[1].trim(); try { Field field = this.getClass().getDeclaredField(name); if(field.getType().isEnum()) […]