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的更多相关文章

  1. Guava源码阅读-base-CharMatcher

    package com.google.common.base; (部分内容摘自:http://blog.csdn.net/idealemail/article/details/53860439) 之前 ...

  2. Guava源码阅读-base-Charsets

    package com.google.common.base; 今天在找base包下的源码阅读时,看到了Charsets,肯定是定义字符集的类,本来就想简单的看一下.(部分内容摘抄自:http://b ...

  3. Guava源码阅读-base-Strings

    package com.google.common.base; 今天阅读的是Srings类,这在程序中经常使用. 比如判断字符串是否为空,我们在之前用jdk方法判断是会用下面这个判断语句. if( i ...

  4. Guava源码阅读-collect-Multiset

    package com.google.common.collect; 我们在进行字符统计时,同常采用的方法就是: String[] text=new String[]{"the weathe ...

  5. Guava源码阅读-io-Files

    package com.google.common.io; 今天阅读一个非常常用的类Files,文件操作类. readLines(File file, Charset charset),这个方法将Fi ...

  6. 【原】AFNetworking源码阅读(一)

    [原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...

  7. Android源码阅读 – Zygote

    @Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...

  8. 源码阅读系列:EventBus

    title: 源码阅读系列:EventBus date: 2016-12-22 16:16:47 tags: 源码阅读 --- EventBus 是人们在日常开发中经常会用到的开源库,即使是不直接用的 ...

  9. CI框架源码阅读笔记4 引导文件CodeIgniter.php

    到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...

随机推荐

  1. C# 重写IComparer 接口

    首先定义比较类 继承自IComparer<Racer> public class RacerComparer : IComparer<Racer> { public enum ...

  2. 17、生命周期-BeanPostProcessor在Spring底层的使用

    17.生命周期-BeanPostProcessor在Spring底层的使用 bean赋值.注入其他组件.@Autowired注解.生命周期注解.@Async --都是 BeanPostProcesso ...

  3. 006_FreeRTOS其他API函数

    (一)FreeRTOS其他API函数是在调试中使用的,具体使用的看书本,贴出来为了方便查找 (二)FreeRTOS其他API函数 (三)常用 1. uxTaskGetSystemState() 获取信 ...

  4. 协议基础:SMTP:使用Telnet学习SMTP协议

    协议基础:SMTP:使用Telnet学习SMTP协议 2018-07-30 20:05:50 liumiaocn 阅读数 7479更多 分类专栏: 工具 Unix/Linux   版权声明:本文为博主 ...

  5. python网络爬虫(一):网络爬虫的定义

    网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开 ...

  6. 分享一个seata demo,讲两个个问题

    Seata,阿里开源的分布式事务框架,多的我就不介绍了,了解详细介绍,请看官网.seata spring boot入门,可以看我上一篇博客<Spring boot微服务如何集成fescar解决分 ...

  7. 笔记三(UEFI详解)

    1.SEC 安全验证 SEC(Security Phase)阶段是平台初始化的第一个阶段,计算机系统加电后进入这个阶段. 1)接收并处理系统启动和重启信号:系统加点信号.系统重启信号.系统运行过程中的 ...

  8. arcgis python pdf合并

    # -*- coding: cp936 -*- import arcpy, os, string #Read input parameters from script tool PDFList = s ...

  9. vue 高德地图

    index.html <link rel="stylesheet" href="http://cache.amap.com/lbs/static/main1119. ...

  10. Idea创建SpringBoot项目整合Hibernate

    然后next 依赖包选择,Web必须 pom.xml: <?xml version="1.0" encoding="UTF-8"?> <pro ...