Java枚举类型简化软件开发流程

日期: 2013-08-01 作者:Randall Nagy翻译:蒋红冰 来源:TechTarget中国 英文

虽然不是Java规范中的原始部分,然而在Java 5中额外添加的枚举类型却备受惹得,添加了新语言特性,使Java更加成熟。不幸的是,并不是所有开发人员都在使用枚举构造时,并没有完全使其发挥作用,这就意味着在非建设性的开发中浪费的时间。这里我们将看到一些有趣的、独特的方式,开发人员通过使用Java枚举类型简化了开发代码。

仔细看看枚举类型

表面看来,枚举类型顾名思义,很容易理解。下面的代码片段是一个典型的例子:

enum codes  
{ one, two, three;  
}  
enum cards {  
  hearts, diamonds, clubs, spades;  
}

了解对象成员

值得注意的是它与C++家族不同,无论是Java还是.NET中的枚举都只是助记符的替代品。相反,这两中技术中的枚举关键字创建了一个全功能类。

public String get(codes which) { 
    return vals.get(which.ordinal()); 

public String set(codes which, String sWho) { 
    return vals.set(which.ordinal(), sWho); 
}

虽然很多开发人员都熟悉枚举方法,如.ordinal(),但很少有人知道添加制定类是多少的简单:

public enum foonum { 
   one, two, three; 
  
   public static void SayHello(foonum val) { 
       System.out.println(Hello  + val); 
   } 
   public void greeting() { 
       System.out.println(Greetings  + this); 
   } 
  public static void main(String … args) { 
      SayHello(foonum.two); 
      foonum.two.greeting(); 
  } 
}

另外,拥有购置能力在枚举的name()类与可编辑的文本、XML或属性之间转换,这也是在人机界面中占进先机的一个好方法:


if(foonum.valueOf(two) == foonum.two) { 
    System.out.println(Yes. We can translate, too.); 
}

默认的大量枚举类型允许我们在一组从零开始的整数中转换,以及所有地枚举标记。保有原始C++枚举结构的精神,现代Java枚举与许多值有关。这种与其它值相关的能力,例如JfileChooser预枚举常量如FILES_ONLY,以及下面后悔无及的,都非常方便。当与其它值映射时,每一个枚举标记都可以 使用构造函数无需调用新的:

public enum ShowNode { 
  
       BOTH(JFileChooser.FILES_AND_DIRECTORIES), 
       FOLDERS(JFileChooser.DIRECTORIES_ONLY), 
       FILES(JFileChooser.FILES_ONLY); 
       private int code; 
  
  
       ShowNode(int code) { 
           this.code = code; 
       } 
  
  
       public int getCode() { 
           return code; 
       } 
  
  
       public String getDescription() { 
           switch (this) { 
               case BOTH: 
                   return Select Files and Folders; 
               case FOLDERS: 
                   return Select Folders; 
               case FILES: 
                   return Select FIles; 
               default: 
                   return Select Node; 
           } 
       } 
   } 
<B>枚举类型转换成零开始的整数</B>

但是还有另外一个有趣的主意:因为默认情况下,枚举类型使用从零开始的序数,所以使用任何枚举集的标记都很容易转换到一个从零开始的数组。应用程序的枚举的默认编号集是任意一组枚举器,些枚举器可用于快速创建一个类,就像许多值存储的机会一样。 

class ClientSettings { 
  ArrayList<String> vals = new ArrayList<String>(); 
  
  
  public enum codes { 
    // We could also use enums like name, address, phone (etc) 
    one, two, three 
  } 
  
  
public ClientSettings() { 
  codes[] set = codes.values(); 
  for (codes code : set) { 
    vals.add(code.name()); 
  } 

  
  
public String get(codes which) { 
  return vals.get(which.ordinal()); 
}   
  
public String set(codes which, String sWho) { 
  return vals.set(which.ordinal(), sWho); 

  
  
public static void main(String[] args) { 
   ClientSettings ref = new ClientSettings(); 
    if (ref.get(codes.two).equals(codes.two.name()) == false) { 
    System.out.println(Error – Conceptual failure #1.); 
    } 
    String sTest = Enumerated arrays are so easy, they are scary.; 
    ref.set(codes.two, sTest); 
    if (ref.get(codes.two).equals(sTest) == false) { 
    System.out.println(Error – Conceptual failure #2.); 
  } 
}

枚举是Java语言有史以来迫切需要的一种语言特性,如果有效使用它,开发人员可以在开发更健壮、更易维护的代码节省时间。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

翻译

蒋红冰
蒋红冰

TechTarget云计算主编,主要负责云计算和虚拟化网站的内容建设。长期专注于IT前沿技术,对云计算、虚拟化、人工智能、区块链等技术都有了解;对行业趋势、市场动态有一定的洞察。

相关推荐