天天看點

jdk1.5新特性5之枚舉之模拟枚舉類型

模拟方式一

package cn.xy.enum;

public class trafficlampeasy

{

 private int time;

 public final static trafficlampeasy redlamp = new trafficlampeasy(20);

 public final static trafficlampeasy greenlamp = new trafficlampeasy(20);

 public final static trafficlampeasy yellowlamp = new trafficlampeasy(5);

 public trafficlampeasy()

 {

 }

 public trafficlampeasy(int time)

  this.time = time;

 public trafficlampeasy nextlamp()

  trafficlampeasy result = new trafficlampeasy();

  if (this == redlamp)

  {

   result = greenlamp;

  }

  else if (this == greenlamp)

   result = yellowlamp;

  else if (this == yellowlamp)

   result = redlamp;

  return result;

 public string getvalue()

  string result = "";

   result = "紅燈,時長:" + time;

   result = "綠燈,時長:" + time;

   result = "黃燈,時長:" + time;

 public int gettime()

  return time;

 public void settime(int time)

}

trafficlampeasy tered = trafficlampeasy.redlamp;

system.out.println(tered.getvalue());

system.out.println(tered.nextlamp().getvalue());

從這個例子中我們看出,枚舉類型其實就是一個類傳回該類本身

模拟方式二

public abstract class trafficlamp

 /**

  * 下一個燈

  */

 public abstract trafficlamp nextlamp();

  * 擷取值

  */

 public abstract string getvalue();

  * 時長

 public trafficlamp()

 public trafficlamp(int time)

  * 紅燈,匿名類,相當于繼承trafficlamp抽象類,并實作抽象方法

 public final static trafficlamp redlamp = new trafficlamp(50) {

  @override

  public trafficlamp nextlamp()

   return greenlamp;

  public string getvalue()

   return "紅燈,時長:" + this.gettime();

 };

 public final static trafficlamp greenlamp = new trafficlamp(50) {

   return yellowlamp;

   return "綠燈,時長:" + this.gettime();

 public final static trafficlamp yellowlamp = new trafficlamp(2) {

   return redlamp;

   return "黃燈,時長:" + this.gettime();

trafficlamp red = trafficlamp.redlamp;

system.out.println(red.getvalue());

system.out.println(red.nextlamp().getvalue());

采用匿名類的方式,那麼什麼是匿名類呢?

匿名類适合那些隻需要使用一次的類

public abstract class anonymousclassdesk

 public abstract double getprice();

 public abstract string getname();

public class desk extends anonymousclassdesk

 @override

 public double getprice()

  return 100;

 public string getname()

  return "普通書桌";

 public static void main(string[] args)

   anonymousclassdesk desk = new anonymousclassdesk() {

   @override

   public double getprice()

   {

    return 100;

   }

   public string getname()

    return "匿名書桌";

  };

  system.out.println(desk.getname());

不僅可以使抽象類,也可以是接口。匿名類沒有什麼特别的地方,同樣還是要實作需要實作的方法。