黑马程序员技术交流社区

标题: 枚举类型问题 [打印本页]

作者: 自由自在2014    时间: 2014-2-17 19:28
标题: 枚举类型问题
import java.io.IOException;



class Text{

    public static void main(String[] args) throws IOException{
          TrafficLamp lamp=TrafficLamp.RED;
          System.out.println(lamp.YELLOW);    // 为什么下面会出现黄曲线? 为什么又能运行出结果呢?
          System.out.println(lamp.valueOf("YELLOW").name());  //为什么会出现黄曲线?为什么又能运行出结果呢?
          System.out.println(lamp.nextLamp());
        
            
        
    }
  
public enum  TrafficLamp{
    RED(40){
        public  TrafficLamp nextLamp(){
            return GREEN;
        };

    },GREEN(30){    public  TrafficLamp nextLamp(){
        return YELLOW;
    };

        
    },YELLOW(10){
        public  TrafficLamp nextLamp(){
            return RED;
        };

    };
   
    public abstract TrafficLamp nextLamp();
    private int time;
    private TrafficLamp(int time){
        this.time=time;
    }
}}


作者: asvsass    时间: 2014-2-17 20:10
泛型的问题吧
作者: 袁梦希    时间: 2014-2-17 20:34
等待大神回答
作者: 李金中    时间: 2014-2-17 21:04
我记得 学C++的时候,遇到过类似问题。
一个static变量 是用类名+. 变量  访问的。
可是也可以用具体的类对象+.变量去访问。
解释是,因为static声明的变量时为所有类对象所共有的,当然可以用类对象去访问该元素。
但是!!不建议这么做,因为体现不出它是为所有对象共有的特性,它是属于类的,不是为某个特定的类对象所拥有的。
枚举值 不就是static成员么。 道理应该一样吧。
作者: 徐青松    时间: 2014-2-17 23:05
出现黄线代表的是警告,在方法前加上注解@SuppressWarnings("static-access")就可以了,那为什么会出现警告呢?因为枚举中valueOf( )是一个静态方法,我们都知道静态方法只能通过静态方法区调用,如楼上所说,因为static声明的变量时为所有类对象所共有的,当然可以用类对象去访问该元素。
但是!!不建议这么做,但是并不代表是错误的,所以可以运行出结果。

作者: 自由自在2014    时间: 2014-2-18 19:36
李金中 发表于 2014-2-17 21:04
我记得 学C++的时候,遇到过类似问题。
一个static变量 是用类名+. 变量  访问的。
可是也可以用具体的类对 ...

谢谢,好像是这样理解的
作者: 小Zeor………    时间: 2014-2-24 01:19
李金中 发表于 2014-2-17 21:04
我记得 学C++的时候,遇到过类似问题。
一个static变量 是用类名+. 变量  访问的。
可是也可以用具体的类对 ...

大神,厉害,跪舔




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