黑马程序员技术交流社区

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

作者: 于星星    时间: 2012-7-28 23:02
标题: 枚举类
在枚举类中有一个valueOf方法,这个方法我不知道具体是做什么的?我在随便传入一个字符串的时候运行会报错误java.lang.IllegalArgumentException 具体代码如下:
  1. public class WeekDay1 {

  2.         public static void main(String[] args) {
  3.                 WeekDay week = WeekDay.MON;
  4.                 System.out.println("name="+week.name());
  5.                 System.out.println("ordinal="+week.ordinal());
  6.                 System.out.println(WeekDay.valueOf("ss"));
  7.         }
  8.        
  9.         public enum WeekDay{
  10.                 SUN,STA,THR,FRI,WEN,MON,TUE
  11.         }
  12. }
复制代码
这个方法有什么作用。为什么传入一个字符串会报错,求解释

作者: 丁二跃    时间: 2012-7-28 23:17
valueOf 会返回一个枚举类型实例 你的 WeekDay.valueOf("ss")  参数错误
无法 通过 ss  获得一个 ss 的枚举实例,因为 你的 weekDay 中没有定义 ss

你的参数可以使用 枚举中定义的那些 SUN,STA,THR,FRI,WEN,MON,TUE

像 WeekDay.valueOf("SUN")   就没有问题了
作者: 乐峰    时间: 2012-7-28 23:18
查API知道枚举的valueof方法的作用是:返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。
不能随便传入一个字符串,要传字符串必须要与Weekday里面声明的常量相匹配,也就是说只能包含在SUN,STA,THR,FRI,WEN,MON,TUE之间。
作者: 吴立杰    时间: 2012-7-28 23:23
查API啊 楼猪!!
作者: 于星星    时间: 2012-7-28 23:32
丁二跃 发表于 2012-7-28 23:17
valueOf 会返回一个枚举类型实例 你的 WeekDay.valueOf("ss")  参数错误
无法 通过 ss  获得一个 ss 的枚举 ...

这个方法主要是干什么的?能有一个具体的实例吗?
作者: 马进    时间: 2012-7-28 23:55
于星星 发表于 2012-7-28 23:32
这个方法主要是干什么的?能有一个具体的实例吗?

这个方法是通过字符返回一个枚举类型。
比如
  1. public enum WeekDay{
  2.                 SUN,STA,THR,FRI,WEN,MON,TUE
  3.         }
复制代码
你只能使用枚举类型中定义好的类型名。比如
WeekDay.valueOf("SUN");

同时一个枚举类型还可以实现一个接口,例如
  1. public class Test {
  2.         interface face{
  3.                 public void doSomething();
  4.         }
  5.        
  6.         public enum WeekDay implements face{
  7.         SUN,STA,THR,FRI,WEN,MON,TUE;

  8.                 public void doSomething() {
  9.                         System.out.println(this.name());
  10.                         switch (this) {
  11.                         case FRI:
  12.                                
  13.                                 break;

  14.                         case MON:
  15.                                 break;
  16.                         case STA:
  17.                                
  18.                                 break;

  19.                         case SUN:
  20.                                 break;
  21.                         case THR:
  22.                                
  23.                                 break;

  24.                         case TUE:
  25.                                 break;
  26.                         case WEN:
  27.                                 break;
  28.                         }
  29.                 }
  30.         }

  31.         public static void main(String[] args){
  32.                 WeekDay.FRI.doSomething();
  33.         }
  34. }
复制代码
就可以根据不同的星期做出不同的操作
作者: 黑马张涛    时间: 2012-7-28 23:57
我试了一下,他返回一个你在枚举中定义的枚举常量。
比如你将System.out.println(WeekDay.valueOf("ss"));中的"ss"改为你在枚举中定义的"MON",程序运行后就返回一个static的MON。
作者: 丁二跃    时间: 2012-7-29 00:29
于星星 发表于 2012-7-28 23:32
这个方法主要是干什么的?能有一个具体的实例吗?

这个方法就是根据字符串返回 一个枚举类型的对象

其实和Interger.valueOf("123")  差不多  这里传入的字符串要是数字  枚举的 valueof 参数要是你定义的那些值的字符串形式




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