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源码阅读-base-CharMatcher
package com.google.common.base; (部分内容摘自:http://blog.csdn.net/idealemail/article/details/53860439) 之前 ...
- Guava源码阅读-base-Charsets
package com.google.common.base; 今天在找base包下的源码阅读时,看到了Charsets,肯定是定义字符集的类,本来就想简单的看一下.(部分内容摘抄自:http://b ...
- Guava源码阅读-base-Strings
package com.google.common.base; 今天阅读的是Srings类,这在程序中经常使用. 比如判断字符串是否为空,我们在之前用jdk方法判断是会用下面这个判断语句. if( i ...
- Guava源码阅读-collect-Multiset
package com.google.common.collect; 我们在进行字符统计时,同常采用的方法就是: String[] text=new String[]{"the weathe ...
- Guava源码阅读-io-Files
package com.google.common.io; 今天阅读一个非常常用的类Files,文件操作类. readLines(File file, Charset charset),这个方法将Fi ...
- 【原】AFNetworking源码阅读(一)
[原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...
- Android源码阅读 – Zygote
@Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...
- 源码阅读系列:EventBus
title: 源码阅读系列:EventBus date: 2016-12-22 16:16:47 tags: 源码阅读 --- EventBus 是人们在日常开发中经常会用到的开源库,即使是不直接用的 ...
- CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...
随机推荐
- BZOJ 3566 概率充电器(树形概率DP)
题面 题目传送门 分析 定义f(i)f(i)f(i)为iii点不被点亮的概率,p(i)p(i)p(i)为iii自己被点亮的概率,p(i,j)p(i,j)p(i,j)表示i−ji-ji−j 这条边联通的 ...
- [React] Create a Query Parameter Modal Route with React Router
Routes are some times better served as a modal. If you have a modal (like a login modal) that needs ...
- HDU 6134 Battlestation Operational | 2017 Multi-University Training Contest 8
破结论没听说过,上式推导到第三步的时候有了O(nlogn) 的做法(枚举倍数+1最后前缀和),并且这种做法可以直接应用到向上取整的计算中,详见forever97 但由于d(n)是积性函数,故可O(n) ...
- vue使用Echarts图表
vue使用Echarts图表 童话_xxv 关注 0.5 2018.12.11 09:09* 字数 325 阅读 1456评论 2喜欢 13 在开发后台系统时,使用图表进行数据可视化,这样会使数据更 ...
- 【深入学习Redis】Redis内存模型
前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串 ...
- MySQL 源码编译安装脚本
cat mysql_init.shmysql_init.sh mysql_init.sh.20190401 mysql_init.sh.back20171030 ...
- Monkey测试感想
monkey测试主要做随机的黑盒测试,通过不断输入伪随机的事件流来测试应用的稳定性,但是由于monkey太过皮,太过随机,最后根本无法控制,很容易陷于一个页面无法出来,或者陷入某个无关紧要的地方无法出 ...
- P3469 割点的应用
https://www.luogu.org/problem/P3469 题目就是说封锁一个点,会导致哪些点(对)连不通: 用tarjan求割点,如果这个点是割点,那么不能通行的点对数就是(乘法法则)儿 ...
- P1106 删数问题 自己码风好菜
一个人的码风好坏究竟会影响多少
- 文件对比工具 Beyond Compare 4.2.9中文破解版for win 附通用注册码
链接: https://pan.baidu.com/s/1yYxPo8nNv0PuOA1ZC9-F1w 提取码: v76g 注册码: --- BEGIN LICENSE KEY --- H1bJTd2 ...