黑马程序员技术交流社区

标题: 关于枚举中的一些疑惑 [打印本页]

作者: 李志广    时间: 2012-8-11 10:28
标题: 关于枚举中的一些疑惑
package cn.itcast.enumration;

import org.junit.Test;

public class Demo2 {
        @Test
        public void test(){
                print(Grade1.A);
        }
        public void print(Grade1 g){
                String value=g.localValue();
                System.out.println(value);
        }
        @Test
        public void test2(){
                System.out.println(Grade.A.name());
                System.out.println(Grade.E.ordinal());
                String str="C";
                Grade g=Grade.valueOf(str);
                System.out.println(g);
        }

}
enum Grade1{
        A("100-90"){
                public  String localValue(){
                        return "优";
                }
        },
        B("89-80"){
                public  String localValue(){
                        return "良";
                }
        },
        C("79-70"){
                public  String localValue(){
                        return "中";
                }
        },
        D("69-60"){
                public  String localValue(){
                        return "一般";
                }
        },
        E("59-0"){
                public  String localValue(){
                        return "差";
                }
        };
        private String value;
        private Grade1(String value){
                this.value=value;
        }
        public String getValue()
        {
                return value;
        }
        public abstract String localValue();
}

学习了枚举后有一些小的疑问,public abstract String localValue();语句中用了abstract修饰,那么enum Grade1不使用abstract吗?
String str="C";Grade g=Grade.valueOf(str);System.out.println(g);是把某一个字符串转换为枚举,那么这个字符串为什么不是任意的呢?
比如将String str="C";改成String str="F";就会出错呢?

作者: 王程    时间: 2012-8-11 12:03
学习了枚举后有一些小的疑问,public abstract String localValue();语句中用了abstract修饰,那么enum Grade1不使用abstract吗?
首先枚举中的每个元素都有public  String localValue(){...}语句,这就已经应用了这个方法,因为 localValue()方法是抽象的,所以只能通过覆盖方法才能使用。
String str="C";Grade g=Grade.valueOf(str);System.out.println(g);是把某一个字符串转换为枚举,那么这个字符串为什么不是任意的呢?
比如将String str="C";改成String str="F";就会出错呢?
枚举中的valueOf(String name)方法返回带指定名称的指定枚举类型的枚举常量,就是根据指定的字符串名字获取相应的枚举元素,你的程序里面没有F这个元素,那怎么能不报错呢,只能传枚举里面有的元素的名字


作者: 李志广    时间: 2012-8-11 12:21
谢谢,问题已解决!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2