驯服Tiger之深入研究枚举类型

2016-02-19 19:02 1 1 收藏

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享驯服Tiger之深入研究枚举类型吧。

【 tulaoshi.com - 编程语言 】

基础知识
  
  在J2SE1.5中通过使用新的 enum 要害字创建指定的对象集合,您可以创建一个枚举类型。然后,可以将每个指定的值看作是那个类的一个实例,这为您提供了指定的整数集合所无法提供的编译时类型安全。清单 1 将创建一个枚举类型,并将类型安全的枚举值作为帮助器方法(helper method)的参数。该枚举类型的 values() 方法返回这种类型的不同值的有序数组。
  
  清单 1. 枚举类型的例子
  
  public class Loop {
   enum Size {
  Small,
  Medium,
  Large
   }
   public static void main(String args[]) {
  for (Size s : Size.values()) {
   helper(s);
  }
   }
  
   private static void helper(Size s) {
  System.out.println("Size value: " + s);
   }
  }
  构造函数、方法和变量
  
  在使用 enum 要害字创建新的枚举类型时,实际上是在创建 java.lang.Enum 类的子类,其中,枚举类型符合通用模式 Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了每个设置的优先值。换句话说,enum Size {Small, Medium, Large} 将映射到清单 2 中所示的构造函数调用中:
  
  清单 2. 映射的构造函数调用
  
  new Enum<Size>("Small", 0);
  new Enum<Size>("Medium", 1);
  new Enum<Size>("Large", 2);
  不必将构造函数的使用限制为间接 Enum 构造函数调用。在使用 enum 要害字时,将创建 Enum 的子类。您可以使用参数和任何别的东西为定义的每个名称添加一些您自己的构造函数调用。名称声明可以看作是对构造函数的调用,您不必添加 new 要害字。这种方法答应您将数据作为参数值传递给构造函数调用,如清单 3 所示。该参数表示 Size 对象的枚举集合的定价因子。位于枚举类型定义之后的 main() 方法演示了这种用法。
  
  清单 3. 定制构造函数的例子
  
  public class Sample {
   enum Size {
  Small(0.8),
  Medium(1.0),
  Large(1.2);
  
  double pricingFactor;
  
  Size(double p) {
   pricingFactor = p;
  }
   }
   public static void main(String args[]) {
  Size s = Size.Large;
  double d = s.pricingFactor;
  System.out.println(s + " Size has pricing factor of " + d);
   }
  }
  运行该程序将返回给定 Size 的定价因子。您还可以定义一个类似于 getPricingFactor() 的方法,并将 pricingFactor 字段设置为 private,以便更多地将它作为类 JavaBean 的属性对待。清单 4 给前面的例子添加了一个方法:
  
  清单 4. 方法的例子
  
  public class Sample2 {
   enum Size {
  Small(0.8),
  Medium(1.0),
  Large(1.2);
  
  private double pricingFactor;
  
  Size(double p) {
   pricingFactor = p;
  }
  
  public double getPricingFactor() {
   return pricingFactor;
  }
   }
   public static void main(String args[]) {
  Size s = Size.Large;
  double d = s.getPricingFactor();
  System.out.println(s + " Size has pricing factor of " + d);
   }
  }
  对于这两种情况,输出均为:
  
  Large Size has pricing factor of 1.2QQRead.com 推出数据恢复指南教程 数据恢复指南教程 数据恢复故障解析常用数据恢复方案硬盘数据恢复教程 数据保护方法数据恢复软件专业数据恢复服务指南 预定义的方法
  
  因为用户定义的枚举类型是 Enum 类型的子类,所以您需要继续用于您的类型的那个类的所有方法。下面列出了完整的方法集合(E 表示枚举类型自身):
  
  public int compareTo(E e)
  public boolean equals(Object o)
  public final Class<E> getDeclaringClass()
  public int hashCode()
  public String name()
  public int ordinal()
  public String toString()
  public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
  一些方法看起来很熟悉,而其他一些方法则是特定于 Enum 类的。compareTo()、equals() 和 hashCode() 方法是典型的 Object 和 Comparable 方法,其中,compareTo() 报告声明元素的顺序。name() 和 ordinal() 方法返回构造函数参数,而 toString() 返回名称。
  
  getDeclaringClass() 和 valueOf() 方法需要稍多一些解释。getDeclaringClass() 方法类似于 Object 的 getClass() 方法,但它没必要返回相同的类。根据这个方法的 Javadoc 的说明:
  
  对于具有特定于常量的类主体的 enum 常量,该方法返回的值可能不同于 Object.getClass() 方法返回的值。
  
  接下来,我将解释特定于常量的类主体。valueOf() 方法是静态的,它答应您从类型的名称中创建枚举的值。
  
  特定于常量的类主体
  
  特定于常量的类主体是 enum 要害字的一个受支持的特性;不过,它们的使用应该受到严格的限制。这个概念正在深入到将枚举类型的每个元素作为一个子类对待的领域。例如,在前面的例子中,Size 枚举类型有一个定价因子参数和 getPricingFactor() 方法。但没有构造函数参数,清单 5 展示了如何利用特定于常量的主体来做同样的事。我们添加了一些额外的大小来让这个例子更有趣些。在这里,Small 的定价因子是 0.8,而 ExtraLarge 和 ExtraExtraLarge 的定价因子是 1.2。其余的大小则采用默认值,即 1.0。
  
  清单 5. 特定于常量的主体
  
  

来源:https://www.tulaoshi.com/n/20160219/1619864.html

延伸阅读
Minbear (dev-club) 相信很多人都做过安装程序,目前最大功能最全的当属InstallShield,但是InstallShield的语法学习起来实在费劲,相对而言vs.net自带的安装部署短小精悍,且使用C#语法,对于一般C#开发者来说使用起来就极为简便,在对其作了一些研究之后,发现vs.net的安装部署项目的功能也已经非常好用,一般的程序安装都可以轻松实现,当...
标签: PHP
大家知道目前表单提交的方式有GET和POST。我在这里不多说什么,给大家看一个以GET方式提交的表单的请求:  GET /cgi-bin/tech/method.cgi?GET=GET HTTP/1.1  Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd...
标签: ASP
  现在“瘦客户”的观点已经是一个神话了,但随着电视或掌上型浏览器的繁荣,这一状况会有所改变。今天绝大多数的网络客户仍使用功能强大的PC,附着着大量的客户端存储器和客户端感兴趣的内容。在Internet协议下,将文件传递到中央服务器有一些方法可供选择,但基于WEB的文件上载比其它方法都要高级。下面来检验这一点。 一、HTTP...
标签: ASP
  二、在ASP中执行 现在已经得出结论,RFC1867是在WEB应用程序上载文件的最好方式。那么如何来运行?Microsoft提供了什么方法?其它有哪些方法可以用? Microsoft的Posting Acceptor ASP不支持multipart/form-data编码方式,但是,Microsoft提供了免费的Posting Acceptor(http://www.microsoft.com/iis/support/iis...
《寂静岭5归途》剧情深入研究分析 SH系列一直是我的最爱,希望大家不要光就画面好不好来讨论SH系列! 首先本人要介绍一下对Silent Hill世界的本质最为透彻和合理的解释意念波理论,本人一直以来都是相当信服这个理论的 在这个理论之下,Silent Hill世界观的核心被认为是不可知论、二元论与唯心论的杂合体 在Silent Hill的世界中,人类的...

经验教程

601

收藏

82
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部