黑马程序员技术交流社区

标题: 交通灯中Lamp.valueOf(opposite).light();valueOf(oppsite)函数定义在哪? [打印本页]

作者: 寇龙飞    时间: 2012-9-3 14:29
标题: 交通灯中Lamp.valueOf(opposite).light();valueOf(oppsite)函数定义在哪?
  1. public void light(){
  2.                 this.lighted = true;
  3.                 if(opposite != null){
  4.                         Lamp.valueOf(opposite).light();
  5.                 }
  6.                 System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");
  7.                
  8.         }
复制代码
Lamp.valueOf(opposite).light();这句代码中,valueOf(oppsite)这个函数的定义是什么?怎么理解?


作者: AngieFans85    时间: 2012-9-3 16:15
light()方法所在的类叫什么,Lamp.valueOf()方法返回的类型就是什么,现在我们假定Lamp.valueOf()方法返回的类型是个Temp类.而oppsite是什么类的引用,我也不知道,现在假设oppsite是Oppsite类的对象的引用,那就可以做如下推断:
  1. class Temp {

  2.         // 一个boolean型变量lighted.
  3.         boolean lighted = false;

  4.         Opposite opposite = null;

  5.         public void light() {
  6.                 this.lighted = true;
  7.                 if (opposite != null) {
  8.                         Lamp.valueOf(opposite).light();
  9.                 }
  10.                 System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");
  11.         }

  12.         public String name() {
  13.                 // return 一个字符串;
  14.         }

  15. }

  16. class Opposite {

  17.         // Opposite类该有些什么,我就不知道了,我还没有看那个视频.

  18. }
复制代码

作者: AngieFans85    时间: 2012-9-3 16:17

补充一下:
  1. class Lamp {

  2.         public static Temp valueOf(Opposite opposite) {
  3.                 // ......

  4.                 // return 一个Temp类的对象
  5.         }

  6. }

  7. class Temp {

  8.         // 一个boolean型变量lighted.
  9.         boolean lighted = false;

  10.         Opposite opposite = null;

  11.         public void light() {
  12.                 this.lighted = true;
  13.                 if (opposite != null) {
  14.                         Lamp.valueOf(opposite).light();
  15.                 }
  16.                 System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");
  17.         }

  18.         public String name() {
  19.                 // return 一个字符串;
  20.         }

  21. }

  22. class Opposite {

  23.         // Opposite类该有些什么,我就不知道了,我还没有看那个视频.

  24. }
复制代码

作者: 寇龙飞    时间: 2012-9-3 16:37
light()方法所在的类叫什么,Lamp.valueOf()方法返回的类型就是什么,现在我们假定Lamp.valueOf()方法返回的 ...

Lamp.valueOf(opposite)感觉是得到此Lamp枚举的opposite属性的值,opposite的只是另外一个Lamp的枚举。感觉是这样子的,想找到这个valueOf函数。

Lamp是枚举。它自身没有valueOf这个方法,枚举类倒是有valueOf方法,但是是2个参数的,纠结。

给你贴这个Lamp.java全部代码:
  1. package com.isoftstone.interview.traffic;

  2. /**
  3. * 每个Lamp元素代表一个方向上的灯,总共有12个方向,所有总共有12个Lamp元素。
  4. * 有如下一些方向上的灯,每两个形成一组,一组灯同时变绿或变红,所以,
  5. * 程序代码只需要控制每组灯中的一个灯即可:
  6. * s2n,n2s   
  7. * s2w,n2e
  8. * e2w,w2e
  9. * e2s,w2n
  10. * s2e,n2w
  11. * e2n,w2s
  12. * 上面最后两行的灯是虚拟的,由于从南向东和从西向北、以及它们的对应方向不受红绿灯的控制,
  13. * 所以,可以假想它们总是绿灯。
  14. * @author 张孝祥 www.it315.org
  15. *
  16. */
  17. /**/

  18. public enum Lamp {
  19.         /*每个枚举元素各表示一个方向的控制灯*/        
  20.         S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),
  21.         /*下面元素表示与上面的元素的相反方向的灯,它们的“相反方向灯”和“下一个灯”应忽略不计!*/
  22.         N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),
  23.         /*由南向东和由西向北等右拐弯的灯不受红绿灯的控制,所以,可以假想它们总是绿灯*/
  24.         S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);
  25.         
  26.         private Lamp(String opposite,String next,boolean lighted){
  27.                 this.opposite = opposite;
  28.                 this.next = next;
  29.                 this.lighted = lighted;
  30.         }


  31.         /*当前灯是否为绿*/        
  32.         private boolean lighted;
  33.         /*与当前灯同时为绿的对应方向*/        
  34.         private String opposite;
  35.         /*当前灯变红时下一个变绿的灯*/        
  36.         private String next;
  37.         public boolean isLighted(){
  38.                 return lighted;
  39.         }
  40.         
  41.         /**
  42.          * 某个灯变绿时,它对应方向的灯也要变绿
  43.          */        
  44.         public void light(){
  45.                 this.lighted = true;
  46.                 if(opposite != null){
  47.                         Lamp.valueOf(opposite).light();
  48.                 }
  49.                 System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");
  50.                
  51.         }
  52.         
  53.         /**
  54.          * 某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿
  55.          * @return 下一个要变绿的灯
  56.          */        
  57.         public Lamp blackOut(){
  58.                 this.lighted = false;
  59.                 if(opposite != null){
  60.                         Lamp.valueOf(opposite).blackOut();
  61.                 }               
  62.                
  63.                 Lamp nextLamp= null;
  64.                 if(next != null){
  65.                         nextLamp = Lamp.valueOf(next);
  66.                         System.out.println("绿灯从" + name() + "-------->切换为" + next);                        
  67.                         nextLamp.light();
  68.                 }
  69.                 return nextLamp;
  70.         }
  71. }
复制代码

作者: AngieFans85    时间: 2012-9-3 17:15
寇龙飞 发表于 2012-9-3 16:37
Lamp.valueOf(opposite)感觉是得到此Lamp枚举的opposite属性的值,opposite的只是另外一个Lamp的枚举。感 ...

valueOf()方法是有可能是枚举,反正我没看那视频,就不猜了.




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