A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张校云 黑马帝   /  2011-10-5 11:07  /  2104 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[code=java]package test;
public enum Lamp {
        S2N("N2S"),S2W("E2W"),E2W("W2E");
        private Lamp(String next){
                this.next = Lamp.valueOf(next);
                System.out.println(next);
        }
        private Lamp next;
        public Lamp getNext() {
                return next;
        }
}[/code]为什么像这样,把Lamp.valueOf(next)放在构造方法里,枚举就不能被成功创建了?是不是Lamp.valueOf()方法要用到当前的枚举实例?可是它是怎么获取当前的枚举实例的呢?

2 个回复

倒序浏览
黑马网友  发表于 2011-10-5 12:53:36
沙发
看代码你是想用枚举实现单例模式吧,但看你的代码又像是想通过一个String类型的值来创建一个对象[code=java]package test;
public enum Lamp {
        S2N("N2S"),S2W("E2W"),E2W("W2E");
        INSTANCE;
        private String next;
        public void setNext(String next){
                this.next = next;
        }
        public String getNext(){
                return this.next;
        }
}[/code][code=java]package test;
public class Test {
        public static void main(String[] args){
               Lamp lamp = Lamp.INSTANCE;
               lamp.setNext("hello");
               System.out.println(lamp.getNext());
        }
}[/code]
回复 使用道具 举报
黑马网友  发表于 2011-10-5 15:19:19
藤椅
Lamp.valueOf()是通过枚举元素的name属性寻找当前枚举已经存在的元素
valueOf
public static <T extends Enum<T>> T valueOf(Class<T> enumType,
                                            String name)返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。(不允许使用额外的空白字符。)

参数:
enumType - 要从中返回常量的枚举类型的 Class 对象
name - 要返回的常量名称
返回:
带指定名称的指定枚举类型的枚举常量
抛出:
IllegalArgumentException - 如果指定枚举类型不包含指定名称的常量,或者指定类对象不表示枚举类型
NullPointerException - 如果 enumType 或 name 为空
S2N("N2S"),S2W("E2W"),E2W("W2E");
你的枚举内根本没有“N2S”、“E2S”、“W2E”这些枚举元素,又怎么能找到给next赋值呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马