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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 橸瑩膤漃寞林 中级黑马   /  2013-12-10 15:42  /  947 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 橸瑩膤漃寞林 于 2013-12-14 20:48 编辑

import java.util.Date;



public class EnumTest {        
        public static void main(String[] args) {               
                new Date(300){};
        }
        
        public enum WeekDay{
                SUN(),MON,TUE,WED,THE,FRI,SET;
                private WeekDay(){System.out.println("first");}
                private WeekDay(int day){System.out.println("secend");}
        }
        
        public enum TrafficLamp{
                RED(30){
                        public TrafficLamp nextLamp(){
                                return GREEN;
                        }
                },
                GREEN(45){
                          public TrafficLamp nextLamp(){
                                return YELLOW;
                        }
                },
                YELLOW(5){
                        public TrafficLamp nextLamp(){
                                return RED;
                        }
                };
                public abstract TrafficLamp nextLamp();
                private int time;
                private TrafficLamp(int time){this.time = time;}
        }
}
这个交通灯的问题,new Date(300){};这里是什么意思,烦请解答,谢谢。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

4 个回复

倒序浏览
  1. new Date(30){};
复制代码


里面传的是参数,调用对应的构造方法。我觉得你应该回去看看用普通类实现枚举的例子,对你理解枚举很有帮助。切记要非常认真啊,我一开始很随意看,两遍都不理解,于是定了定心,集中精神看就看懂了。也可以去看看我的博客:http://yang490222033.blog.163.com/blog/static/2289490072013119101140449/

回去看普通类模拟枚举是最正确的做法。
回复 使用道具 举报
那运行后什么东西都看不到啊,如果我运行new Date(30){};那要怎么样才能看到返回值了?
回复 使用道具 举报
本帖最后由 发哥-阿花 于 2013-12-15 12:58 编辑
橸瑩膤漃寞林 发表于 2013-12-10 20:29
那运行后什么东西都看不到啊,如果我运行new Date(30){};那要怎么样才能看到返回值了? ...


认真调试了下你的程序,发现你创建的Date匿名子类对象与TrafficLamp枚举没什么关系吧?

因为枚举是不能用new来创建对象的,故构造函数用private修饰的,RED后面小括号里面的参数也不用调用者去传入的;

要获得交通灯的属性的话,看看这样:

  1. public class Test01 {

  2.      public static void main(String[] args) {
  3.           new Date(300){};
  4.           /*以下 为我在你原来代码上添加的三行*/
  5.           TrafficLamp lamp = TrafficLamp.RED;//获得红灯
  6.           System.out.println(lamp);//打印红灯,会输出字符串“RED”
  7.           System.out.println(lamp.nextLamp());//打印下一个返回的灯,“GREEN”;
  8. }

  9.      public enum TrafficLamp{
  10.           RED(30){
  11.                public TrafficLamp nextLamp(){
  12.                     return GREEN;
  13.           }
  14.      },
  15.      GREEN(45){
  16.           public TrafficLamp nextLamp(){
  17.                return YELLOW;
  18.           }
  19.      },
  20.       YELLOW(5){
  21.           public TrafficLamp nextLamp(){
  22.                return RED;
  23.           }
  24.      };
  25.      public abstract TrafficLamp nextLamp();
  26.      private int time;
  27.      private TrafficLamp(int time){this.time = time;}
  28.      }
  29. }
复制代码





评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
还不清楚可以提出来{:soso_e121:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马