zoukankan      html  css  js  c++  java
  • Guava源码阅读-base-Enums

    package com.google.common.base;


    guava源码中对这个类的方法介绍只有一句话:
    Utility methods for working with {@link Enum} instances.

    意思就是给Enum实例提供的工具方法。

    枚举是什么?
    枚举简单的说也是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合。
    举个例子,颜色也可以定义成枚举类型,它可以包含你定义的任何颜色,当需要的时候,只需要通过枚举调用即可,另外
    比如说季节(春夏秋冬)、星期(星期一到星期日)等等这些具有共同投特征的数据都可以定义枚举。

    那枚举是什么样的呢?

    public enum  GenderEnum {
        MALE(1,"男"),FEMALE(2,"女");
        private int code;
        private String value;
    
        GenderEnum(int code,String value){
            this.code = code;
            this.value = value;
        }
    }

    上面就是一个性别的枚举,包含男和女,用的时候直接调用就行。


     

    再来看看guava对于枚举的支持。

    1、getField()方法

     public static Field getField(Enum<?> enumValue) {
        Class<?> clazz = enumValue.getDeclaringClass();
        try {
          return clazz.getDeclaredField(enumValue.name());
        } catch (NoSuchFieldException impossible) {
          throw new AssertionError(impossible);
        }
      }

     返回变量名为enumValue变量值的Field

    2、getIfPresent()方法

    public static <T extends Enum<T>> Optional<T> getIfPresent(Class<T> enumClass, String value) {
        checkNotNull(enumClass);
        checkNotNull(value);
        return Platform.getEnumIfPresent(enumClass, value);
      }

    根据所给类型一个optional<enum>常量

     

    3、stringConverter()方法

    public static <T extends Enum<T>> Converter<String, T> stringConverter(final Class<T> enumClass) {
        return new StringConverter<T>(enumClass);
      }

    返回一个converter对象转换成sring以及给定Enum类型的值,使用Enum.valueOf(Class, String)与Enum.name(). 

     

    下面看一下实例:

     

    枚举对象:

    public enum  GenderEnum {
        MALE(1,"男"),FEMALE(2,"女");
        private int code;
        private String value;
    
        GenderEnum(int code,String value){
            this.code = code;
            this.value = value;
        }
    }

     

    下面是测试方法:

         GenderEnum male = GenderEnum.MALE; 
    System.out.println(
    "枚举1:"+Enums.getField(male));
    System.out.println(
    "枚举2:"+Enums.getIfPresent(GenderEnum.class,"生活"));
    System.out.println(
    "枚举3:"+Enums.getIfPresent(GenderEnum.class, String.valueOf(GenderEnum.valueOf("MALE"))));
    System.out.println(
    "枚举4:"+Enums.stringConverter(GenderEnum.class));
    Converter
    <String,GenderEnum> stringGenderEnumConverter = Enums.stringConverter(GenderEnum.class);
    System.out.println("枚举5:"+stringGenderEnumConverter.convert(GenderEnum.MALE.name()));

    输出结果:

    枚举1:public static final javatest.model.GenderEnum javatest.model.GenderEnum.MALE
    枚举2:Optional.absent()
    枚举3:Optional.of(MALE)
    枚举4:Enums.stringConverter(javatest.model.GenderEnum.
    class)
    枚举5:MALE

     

     

     
  • 相关阅读:
    [XNA]2D图形概要(2D Graphics Overview)
    [WP7]WindowsPhone支持VS2010的开发工具出来了
    [WM]用双缓冲在CStatic上面画
    [读书]至理名言摘自你的灯还亮着吗
    无题!!
    Windows 8 Consumer Preview 中的快捷键
    aptana studio 汉化与安装 zencoding、配置
    jQuery常用焦点图,可做选项卡切换
    jQuery 导航点击变换样式
    原生JS:焦点图 左右滚动
  • 原文地址:https://www.cnblogs.com/haolnu/p/7398004.html
Copyright © 2011-2022 走看看