如果我有一个枚举对象,它将被视为原始对象还是引用?
这是参考类型。Java原语是boolean byte short char int long float double
。
您可以通过调用ordinal()
,获取枚举常量的值,该iterator
值由EnumSet和EnumMap使用,并且“以其自然顺序遍历元素(声明枚举常量的顺序)”
您甚至可以将自己的成员添加到枚举类,如下所示:
public enum Operation {
PLUS { double eval(double x, double y) { return x + y; } },
MINUS { double eval(double x, double y) { return x - y; } },
TIMES { double eval(double x, double y) { return x * y; } },
DIVIDE { double eval(double x, double y) { return x / y; } };
// Do arithmetic op represented by this constant
abstract double eval(double x, double y);
}
//Elsewhere:
Operation op = Operation.PLUS;
double two = op.eval(1, 1);
问题内容: 有没有一种方法可以解决由两个互相引用的枚举引起的类加载问题? 我有两组枚举Foo和Bar,它们的定义如下: 上面的代码作为输出产生: 我知道为什么会发生- JVM开始对Foo进行类加载;它在Foo.A的构造函数中看到Bar.Alpha,因此开始加载Bar。它在对Bar.Alpha的构造函数的调用中看到Foo.A引用,但是(因为我们仍然在Foo.A的构造函数中)Foo.A此时为null,
问题内容: 给定以下枚举,将Int强制转换为Java中的枚举的正确方法是什么? 问题答案: 尝试在必须为or的地方,即该枚举的有效序数。 请注意,在Java中,枚举实际上是类(因此,枚举值是对象),因此您不能将an 甚至转换为枚举。
问题内容: 在阅读有效的Java时,我遇到了“使用枚举而不是常量”的建议。在当前项目中,我正在执行与以下类似的操作: 我将如何使用枚举来实现此目的?由于必须使用该接口,因此必须为索引使用。上面的例子只是一个例子。我实际上正在使用一个for索引值的API 。 问题答案: 将一种有用的模式与一种反模式一起应用通常会失败;-) 在您的情况下,如果要用值替换常量,则将数组用于非真正的类数组数据会带来问题。
问题内容: 在Java <1.5中,常量将像这样实现 并且您可以像这样使用它: 现在,显然在1.5中,您应该使用枚举: 现在您可以像这样使用它: 我觉得有点难看。现在,我可以轻松添加几个静态变量: 现在,我可以再次执行此操作: 具有枚举的所有类型安全性。 这是好风格还是坏风格?您能想到更好的解决方案吗? 更新资料 Vilx-是第一个强调我所缺少的东西的人-枚举应该是一等公民。在Java中,这意味着
问题内容: 无论如何,通过将其与给定的字符串进行比较来检查是否存在枚举?我似乎找不到任何这样的功能。我可以尝试使用该方法并捕获异常,但是据我了解,捕获运行时异常不是一种好习惯。有人有什么想法吗? 问题答案: 我不认为没有捕获异常的内置方法。您可以改用如下方式: 编辑: 正如乔恩·斯凯特(Jon Skeet)所述,每次调用时,都会通过克隆私有支持数组来工作。如果性能至关重要,则可能只需要调用一次,缓