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

 

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

 

目录
相关文章
|
1月前
|
安全 JavaScript 前端开发
JDK1.8的重要的新特性与功能
Java Development Kit (JDK) 1.8,也称为Java 8,是Java平台的一个重大更新,于2014年3月发布。它引入了多项新特性、新的API和性能提升
69 3
|
2月前
|
监控 安全 Java
探索Java的未来:JDK 18新特性全览
探索Java的未来:JDK 18新特性全览
69 0
|
2月前
|
缓存 安全 Java
JDK 14全景透视:每个Java开发者必知的新特性
JDK 14全景透视:每个Java开发者必知的新特性
51 0
|
2月前
|
JavaScript 前端开发 安全
Java新纪元:一探JDK 15的全新特性
Java新纪元:一探JDK 15的全新特性
43 0
|
2月前
|
JSON Java API
探秘JDK 13的黑科技:新特性一览
探秘JDK 13的黑科技:新特性一览
43 0
|
2月前
|
Java 测试技术 API
深度剖析JDK 11全新特性:编程艺术的巅峰之作
深度剖析JDK 11全新特性:编程艺术的巅峰之作
40 0
|
2月前
|
存储 Java 数据管理
探秘JDK 10:崭新特性悉数解析
探秘JDK 10:崭新特性悉数解析
30 0
|
2月前
|
JSON 编解码 Java
Java升级:JDK 9新特性全面解析“
Java升级:JDK 9新特性全面解析“
29 0
|
2月前
|
并行计算 Java 程序员
深入解析JDK 8中的Lambda表达式:新特性的力量
本文将深入探讨JDK 8中引入的最引人注目的新特性之一:Lambda表达式。我们将详细解析Lambda表达式的概念、语法和用途,并通过实际示例展示如何利用Lambda表达式简化代码和提高编程效率。
|
2月前
|
SQL 人工智能 运维
JDK8 — 17特性
JDK8 — 17特性
57 0
JDK8 — 17特性