Guava源码阅读-base-Enums

Posted 张瑞浩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

 

 

以上是关于Guava源码阅读-base-Enums的主要内容,如果未能解决你的问题,请参考以下文章

guava源码阅读——collect.Sets类

Guava源码阅读-base-Charsets

guava源码阅读——collect.ForwardingCollection类

阅读源码,要学会根据源码发现问题,提出问题,让问题反过来驱动阅读源码

Netty源码阅读计划——阅读环境搭建

问答形式阅读jQuery源码