enum 居然要这么写,我彻底惊呆了 java枚举enum 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 很简单的枚举啊。public class TestLogger { public static void main(String[] args) { System.out.println(DIR.LEFT); System.out.println(DIR.RIGHT); } static enum DIR{ LEFT,RIGHT,UP,DOWM; }} 你那代码写得有点2吧。枚举正常使用就行了。public enum MobileOSType { IOS, ANDROID, WEB } 我想我大概知道什么问题了,因为那是android,所以不能这样写if(1==MobileOSType.IOS){},j2se可以这样写么? 如果我想使用switch语句,String形式可以么?而如果private static int Ready=0;private static String OnHold=1; 这样的话,你觉得看着舒服么?另外,你如果连续用5个6个if else语句,你不觉得难受么 MobileOSType.IOS是一个类,怎么可能和1比较,应该是if(1==MobileOSType.IOS.ordinal()){}, MobileOSType.IOS是一个类,怎么可能和1比较,应该是if(1==MobileOSType.IOS.ordinal()){},这就是java的问题你没想过为什么这个不是一个int,而是一个类么,我写了5年.net,所以从来没觉得ios应该是个类啊,我5年来大部分的需求就是if(ios=1),为什么ios也不能自动转为int?所以我1楼的写法就是最简洁,能调用的写法了,写复杂,以后自己或别人调用就方便了,如果不这样写,根本没法用,反正我看遍历也是很不爽的。也没有写5,6个if,我看过不少java的代码是写5,6个if的,虽然也可以用其他写法,也没有很不爽, 因为当时项目赶或者什么原因真的需要! 1=ios只是个比喻,也不是说项目中就这么写 public static FruitEnum valueOf(int value) { // 手写的从int到enum的转换函数你这边的value作用是序号吗?就是和枚举关联的int型整数,还是有其他含义? 枚举不知这样用的,看一下TimeUnit的代码,所有方法看java.lang.Enum可以实现接口,不能继承。this.ordinal(); // 顺序号,从0开始this.name(); // 枚举字符串形式UserTypeEnum Customer = UserTypeEnum.values()[1]; // 通过class获取所有枚举数组,再根据下标活动具体哪个枚举对象Customer =UserTypeEnum.valueOf("Customer"); Class clazz=UserTypeEnum.class;Customer =Enum.valueOf(clazz, "Customer"); Java的Enum不是简单的Enum,应该可以理解为对象池。 enum FruitEnum { APPLE, ORANGE;}========FruitEnum.APPLE.ordinal(); // 0FruitEnum.ORANGE.ordinal(); // 1FruitEnum.values()[0]; // APPLEFruitEnum.values()[1]; // ORANGE这都是枚举的基本用法,枚举是类,可以实现接口,并且是常用的实例化控制手段,很多单例写成枚举。吐槽之前至少先入门。 枚举的作用是为了类型安全,可以不让非法的数据作为参数传入。当然,采取这样的方法是可行的:public static final String READY = "0";public static final String ON_HOLD = "1"; 如果这样用的话,对于调用者来说,可以传个 "abc" 也是未偿不可的。如果采用枚举的话,就不能想使用什么就使用什么了。另外,枚举有很多使用方法,可以在枚举中声明抽象方法,在不同的枚举值中实现该方法,以达到工厂方法的目的。PS:使用枚举时,很少会使用其序号值,一般直接使用其枚举量。当然了,Java 中的枚举只是一颗语法糖而已,在编译后的字节码与常量枚举类所产生的效果是一致的。语法都很简单,就看怎么去灵活运用了,这才是技术人员的根本。 你根本就不需要枚举成员具体的值 直接定义就行 根本用不着int那些东西 java1.5吸收c的优点加入枚举,提倡使用。本人也一直在用分享下: public static FruitEnum valueOf(int value) { FruitEnum[] fs = FruitEnum.values(); for (FruitEnum f:fs) { if(f.value==value)return f; } return null; }这么写好点;还有如果只是个1,2 的就别用构造函数,直接enum FruitEnum { APPLE, ORANGE;}当还有其他值得时候用构造函数如下:package ass;enum FruitEnum { APPLE(1,"红色"), ORANGE(2,"黄色"); private int value = 0; private String desc; private FruitEnum(int value,String desc) { this.value = value; this.desc = desc; } public static FruitEnum valueOf(int value) { FruitEnum[] fs = FruitEnum.values(); for (FruitEnum f:fs) { if(f.value==value)return f; } return null; } public int value() { return this.value; } public static void main(String[] args) { }}这时候用构造函数才优雅。欢迎加入java技术交流群:60840475 进行讨论。 请教大家一个排序的问题 怎样实现这个多选框操作的效果?? struts中的select标签没有onpropertychange 属性? 此数组是啥意思?谢 有点Java基础?想深入学习,请指点一些好书? 关于编码转化问题 Access 数据库该怎么建立JDBC连接 写入Access2000出现No ResultSet was produced错误,但数据已经写入,部分语句如下: ??用java编写一个管理办公室人事、财物、资源的系统 java如何将明文加密成密文存到数据库中? 求大神进来解答个小问题 有界面的java计算器,而且可以存放10个数字
public static void main(String[] args) {
System.out.println(DIR.LEFT);
System.out.println(DIR.RIGHT);
}
static enum DIR{
LEFT,RIGHT,UP,DOWM;
}
}
IOS, ANDROID, WEB
}
switch语句,String形式可以么?
而如果
private static int Ready=0;
private static String OnHold=1;
这样的话,你觉得看着舒服么?另外,你如果连续用5个6个if else语句,你不觉得难受么
你没想过为什么这个不是一个int,而是一个类么,我写了5年.net,所以从来没觉得ios应该是个类啊,我5年来大部分的需求就是if(ios=1),为什么ios也不能自动转为int?所以我1楼的写法就是最简洁,能调用的写法了,写复杂,以后自己或别人调用就方便了,如果不这样写,根本没法用,反正我看遍历也是很不爽的。也没有写5,6个if,我看过不少java的代码是写5,6个if的,虽然也可以用其他写法,也没有很不爽, 因为当时项目赶或者什么原因真的需要!
你这边的value作用是序号吗?就是和枚举关联的int型整数,还是有其他含义?
可以实现接口,不能继承。
this.ordinal(); // 顺序号,从0开始
this.name(); // 枚举字符串形式
UserTypeEnum Customer = UserTypeEnum.values()[1]; // 通过class获取所有枚举数组,再根据下标活动具体哪个枚举对象
Customer =UserTypeEnum.valueOf("Customer");
Class clazz=UserTypeEnum.class;
Customer =Enum.valueOf(clazz, "Customer");
APPLE, ORANGE;
}========FruitEnum.APPLE.ordinal(); // 0
FruitEnum.ORANGE.ordinal(); // 1FruitEnum.values()[0]; // APPLE
FruitEnum.values()[1]; // ORANGE这都是枚举的基本用法,枚举是类,可以实现接口,并且是常用的实例化控制手段,很多单例写成枚举。吐槽之前至少先入门。
public static final String ON_HOLD = "1"; 如果这样用的话,对于调用者来说,可以传个 "abc" 也是未偿不可的。如果采用枚举的话,就不能想使用什么就使用什么了。另外,枚举有很多使用方法,可以在枚举中声明抽象方法,在不同的枚举值中实现该方法,以达到工厂方法的目的。PS:使用枚举时,很少会使用其序号值,一般直接使用其枚举量。当然了,Java 中的枚举只是一颗语法糖而已,在编译后的字节码与常量枚举类所产生的效果是一致的。语法都很简单,就看怎么去灵活运用了,这才是技术人员的根本。
FruitEnum[] fs = FruitEnum.values();
for (FruitEnum f:fs) {
if(f.value==value)return f;
}
return null;
}
这么写好点;还有如果只是个1,2 的就别用构造函数,直接enum FruitEnum {
APPLE, ORANGE;
}
当还有其他值得时候用构造函数如下:
package ass;enum FruitEnum {
APPLE(1,"红色"), ORANGE(2,"黄色"); private int value = 0;
private String desc;
private FruitEnum(int value,String desc) {
this.value = value;
this.desc = desc;
} public static FruitEnum valueOf(int value) {
FruitEnum[] fs = FruitEnum.values();
for (FruitEnum f:fs) {
if(f.value==value)return f;
}
return null;
} public int value() {
return this.value;
}
public static void main(String[] args) {
}
}这时候用构造函数才优雅。
欢迎加入java技术交流群:60840475 进行讨论。