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 = "";

  if (this == REDLAMP)
  {
   result = "红灯,时长:" + time;
  }
  else if (this == GREENLAMP)
  {
   result = "绿灯,时长:" + time;
  }
  else if (this == YELLOWLAMP)
  {
   result = "黄灯,时长:" + time;
  }
  return result;
 }

 public int getTime()
 {
  return time;
 }

 public void setTime(int time)
 {
  this.time = time;
 }
}

 

TrafficLampEasy teRed = TrafficLampEasy.REDLAMP;
System.out.println(teRed.getValue());
System.out.println(teRed.nextLamp().getValue());

从这个例子中我们看出,枚举类型其实就是一个类返回该类本身

 

 

模拟方式二

package cn.xy.Enum;

public abstract class TrafficLamp
{
 /**
  * 下一个灯
  */
 public abstract TrafficLamp nextLamp();

 /**
  * 获取值
  */
 public abstract String getValue();

 /**
  * 时长
  */
 private int time;

 public TrafficLamp()
 {
 }

 public TrafficLamp(int time)
 {
  this.time = time;
 }

 /**
  * 红灯,匿名类,相当于继承TrafficLamp抽象类,并实现抽象方法
  */
 public final static TrafficLamp REDLAMP = new TrafficLamp(50) {
  @Override
  public TrafficLamp nextLamp()
  {
   return GREENLAMP;
  }

  @Override
  public String getValue()
  {
   return "红灯,时长:" + this.getTime();
  }
 };

 public final static TrafficLamp GREENLAMP = new TrafficLamp(50) {
  @Override
  public TrafficLamp nextLamp()
  {
   return YELLOWLAMP;
  }

  @Override
  public String getValue()
  {
   return "绿灯,时长:" + this.getTime();
  }
 };

 public final static TrafficLamp YELLOWLAMP = new TrafficLamp(2) {
  @Override
  public TrafficLamp nextLamp()
  {
   return REDLAMP;
  }

  @Override
  public String getValue()
  {
   return "黄灯,时长:" + this.getTime();
  }
 };

 public int getTime()
 {
  return time;
 }

 public void setTime(int time)
 {
  this.time = time;
 }
}

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;
 }

 @Override
 public String getName()
 {
  return "普通书桌";
 }

}

 public static void main(String[] args)
 {
   AnonymousClassDesk desk = new AnonymousClassDesk() {

   @Override
   public double getPrice()
   {
    return 100;
   }

   @Override
   public String getName()
   {
    return "匿名书桌";
   }
  };

  System.out.println(desk.getName());
 }

 

不仅可以使抽象类,也可以是接口。匿名类没有什么特别的地方,同样还是要实现需要实现的方法。

 

目录
相关文章
|
9天前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
27 7
|
3月前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
47 3
|
2月前
|
存储 安全 Java
JDK1.8 新的特性
JDK1.8 新的特性
26 0
|
3月前
|
编解码 安全 Java
jdk8新特性-接口和日期处理
jdk8新特性-接口和日期处理
|
4月前
|
Java API
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
|
4月前
|
Java API Apache
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
|
4月前
|
Oracle Java 关系型数据库
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
|
4月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
4月前
|
Java API 开发者
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
137 0
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
|
3月前
|
Java 编译器 API
JDK8新特性--lambda表达式
JDK8的Lambda表达式是Java语言的一大进步。它为Java程序提供了更多的编程方式,让代码更加简洁,也让函数式编程的概念在Java中得到了体现。Lambda表达式与Java 8的其他新特性,如Stream API、新的日期时间API一起,极大地提高了Java编程的效率和乐趣。随着时间的流逝,Java开发者对这些特性的理解和应用将会越来越深入,进一步推动Java语言和应用程序的发展。
16 0