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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 还记得梦想吗 于 2014-2-18 01:06 编辑

自己复习试着自己敲一遍交通灯管理项目,其中有两个方法不是很理解。
枚举自己的方法一个是name()一个是toString 查Api
两个方法 很相近
public final String name()返回此枚举常量的名称,在其枚举声明中对其进行声明。 与此方法相比,大多数程序员应该优先考虑使用 toString() 方法,因为 toString 方法返回更加用户友好的名称。该方法主要设计用于特殊情形,其正确性取决于获得正确的名称,其名称不会随版本的改变而改变。
返回: 枚举常量的名称
toStringpublic String toString()返回枚举常量的名称,它包含在声明中。可以重写此方法,虽然一般来说没有必要。当存在更加“程序员友好的”字符串形式时,应该使用枚举类型重写此方法。
覆盖:Object 中的 toString返回: 枚举常量的名称为什么张老师在程序中用name()而不用toString??
public void light(){
  //使这个灯变量亮
  this.lighted = true;
  //让其对应的灯也变亮
  if(opposite!=null){
   //设置一个灯为其对应的灯opposite  并使其变亮
   Lamp lampOpposite = Lamp.valueOf(opposite);
   lampOpposite.light();
  }
  System.out.println(name() + "lamp is green,这条道路个对应的路线可以通行,还有四条不变一直能通行的");
}


valueOf 上面写传2个参数,为什么老师之传了一个参数???public static <T extends Enum<T>> T valueOf(Class<T> enumType,String name)返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。(不允许使用额外的空白字符。)
参数: enumType - 要从中返回常量的枚举类型的 Class 对象 name - 要返回的常量名称 返回: 带指定名称的指定枚举类型的枚举常量 抛出: IllegalArgumentException - 如果指定枚举类型不包含指定名称的常量,或者指定类对象不表示枚举类型 NullPointerException - 如果 enumType 或 name 为空 从以下版本开始: 1.5


评分

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

查看全部评分

3 个回复

倒序浏览
显示当前灯亮了只用name()方法就可以了。因为它只要知道当前灯的名字就可以了。name()是final修饰的。不能覆盖。
而toString()方法你可以自己覆盖,假如我让toString() {return "current lamp:" + this.name() + "next lamp:" + this.nextLamp;} //覆盖toString()方法,让它同时返回当前灯和下一个灯的信息。那么我显示当前灯亮了用toString()就不太适合。
回复 使用道具 举报
e.c 发表于 2014-2-18 12:04
显示当前灯亮了只用name()方法就可以了。因为它只要知道当前灯的名字就可以了。name()是final修饰的。不能 ...

Enum.valueOf(Lamp.class, "S2N");       //能过Enum类的静态方法返回一个枚举类对象。不能确定类型。所以可以通过第一个参数确定返回的枚举实例对象是什么枚举类的。
return Lamp.valueOf(this.nextLamp);  //通过字符串返回一个当前枚举类的实例对象。返回类型是能确定的(Lamp).

评分

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

查看全部评分

回复 使用道具 举报
e.c 发表于 2014-2-18 12:09
Enum.valueOf(Lamp.class, "S2N");       //能过Enum类的静态方法返回一个枚举类对象。不能确定类型。所 ...

受教了,谢谢指点
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马