是否有关于如何命名Java枚举的"官方"建议?
enum Protocol { HTTP, HTTPS, FTP }
Run Code Online (Sandbox Code Playgroud)
要么
enum Protocols { HTTP, HTTPS, FTP }
Run Code Online (Sandbox Code Playgroud)
我知道在.Net世界中,建议使用单数,除了表示位标志的枚举.只是好奇Java中是否有类似的东西.
一个相似的问题似乎是.Net特定的:枚举的单数或复数?
有一条规则说:
表示常量(最终变量)的名称必须全部使用下划线来分隔单词(取自http://geosoft.no/development/javastyle.html)
这适用于原始类型,如int或字符串:
private static final int MAX_COUNT = 10;
Run Code Online (Sandbox Code Playgroud)
但是什么是非原始类型?在大多数情况下,我见过以下内容:
private static final Logger log = Logger.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)
或者在单例中,实例变量不是大写的.
问题是声明这些类型的变量(如日志和实例)的正确方法是什么?
Java
valueOf()
为每个Enum<T>
对象提供了一个方法,所以给出了enum
类似的方法
public enum Day {
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
Run Code Online (Sandbox Code Playgroud)
一个人可以像查找一样
Day day = Day.valueOf("Monday");
Run Code Online (Sandbox Code Playgroud)
如果传递给的字符串valueOf()
与现有Day
值不匹配(区分大小写),IllegalArgumentException
则抛出a.
要进行不区分大小写的匹配,可以在Day
枚举中编写自定义方法,例如
public static Day lookup(String day) {
for (Day d : Day.values()) {
if (d.name().equalsIgnoreCase(day)) {
return type;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
是否有任何通用的方法,在不使用值或任何其他额外对象的缓存的情况下,只编写一次lookup()
上面的静态方法(即,不是每个enum
),假定该values()
方法Enum<E>
在编译时被隐式添加到类中?
这种"通用" lookup()
方法的签名与该方法类似Enum.valueOf()
,即:
public static <T extends Enum<T>> T lookup(Class<T> enumType, String name); …
Run Code Online (Sandbox Code Playgroud) 我有一个枚举类型......
public static enum Methods {
NOTEQUAL,
ORDERED,
minMatch,
minItem,
minLength,
sameLength,
}
Run Code Online (Sandbox Code Playgroud)
问题是我应该如何使用编码约定.我应该使用camelCase NotEqual
(我在一个简单的类中使用)还是应该这样做:NOT_EQUAL
?或者只是使用大写字符:NOTEQUAL
,SAMELENGTH
?
这有什么代码约定吗?
这里的肛门问题:我们有Java枚举,它们是自己的类,以及作为类成员的枚举:
public enum reportType { ...
Run Code Online (Sandbox Code Playgroud)
每次我看到它都会刺激我*因为当我看到它在声明中使用时,它是一个类型,并且类型应该大写.但是当我试图利用它时,Eclipse警告我不应该将字段名称大写.我认为Eclipse可能比我更了解官方的Java约定,但它似乎并不正确.甚至翻阅了Java约定文档,但没有看到引用这个问题.
我有一个Java类,其形式如下: -
public class Angle
{
ANGLE_TYPE angleType;
ANGLE_TYPE defaultAngleType = ANGLE_TYPE.RAD;
enum ANGLE_TYPE
{
DEG, RAD, DEGMIN, DEGMINSEC;
}
}
Run Code Online (Sandbox Code Playgroud)
正如可以看到的,该类定义了"枚举".我的问题是关于实例变量'defaultAngleType'.我希望它是这样的,所以这个变量只能赋值RAD或DEG,否则抛出错误.
知道如何实现这个吗?
我的问题是“枚举中是否可以有一个 int 标识符?” 我正在开发一个 java 程序,我需要有包含数字和字母的标识符,但 eclips 不接受它。
例如公共枚举标签{ 5F25, 4F, . . . }
有谁知道有没有办法解决这个问题!谢谢
在互联网上大多数提到JAVA枚举,无处不在提到枚举应该全部为大写(例如:)ACTIVE
.
像这里:编码约定 - 命名枚举
但是当涉及到Rails时,在所有的示例和文档中,它们都使用小写枚举值(例如:'active'),如下所示:http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html
这是有道理的,因为rails还通过这些枚举的名称提供实例方法(例如:obj.active?).这是Rails中的枚举被用作小写的唯一原因,还是更多呢?当我们使用枚举作为小写时,我们也不同于惯例,是否应该如此?或者我们也应该在Rails中使用大写枚举?
因此,例如我status
在我的模型中有一个枚举,根据惯例,它可以是活动的,草稿的或非活动的,如果它是:
enum status: {active: 1, draft: 2, inactive: 3}
Run Code Online (Sandbox Code Playgroud)
要么:
enum status: {ACTIVE: 1, DRAFT: 2, INACTIVE: 3}
Run Code Online (Sandbox Code Playgroud)
哪一个和为什么?
我想使用enum作为切换字符串的方法,但是java抱怨我的字符串包含“-”。如下面的代码所示,其中IC19-01和IC19-02包含“-”。
public class CMain {
public enum Model {
IC19-01, IC19-02
}
public static void main(String[] args){
String st = "IC19-01";
switch (Model.valueOf(st)) {
case IC19-01:
System.out.println("Case IC19-01");
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我在使用" - "创建Java中的枚举时遇到问题 - 分隔的字符串:
public enum CipherList{
RSA-MD5,AES128-SHA,AES256-SHA;
}
Run Code Online (Sandbox Code Playgroud)
我收到编译错误.
我创建了这个枚举:
public enum CoffeeSorts {
Coffee("Kaffee"), Espresso("Espresso"), Mocca("Mocca"), Cappuccino(
"Cappuccino"), LatteMacchiato("Latte Macchiato"), DoubleEspresso(
"doppelter Espresso");
private final String stringValue;
private CoffeeSorts(final String s) {
stringValue = s;
}
public String toString() {
return stringValue;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方式来使用它
public ACoffee createCoffee(String type) {
switch (type) {
case CoffeeSorts.Cappuccino :
try {
return new ChocolateSprincles(new Cream(new Coffee()));
} catch (Exception e) {}
return null;
break;
case CoffeeSorts.LatteMacchiato :
try {
return new ...
}
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
它只给我一个错误,说"无法从CoffeeSorts转换为String".你能告诉我我做错了什么吗?