Java返回类型泛型的用法小结

版权声明:本文为博主原创文章,未经博主允许不得转载。

关于Java泛型的基本用法就不多说了,主要是一个编译期的检查,也避免了我们代码中的强制转换,比较经典的用法有泛型DAO,泛型Page的DTO。

现在我要说的是一个挺有趣但是貌似还不是太多的人在代码中使用的方法,前段时间用guava和op4j的时候发现这样的用法,看看了源码,也是很简单的。

比如guava中创建集合的方法 List<xx> list = Lists.newArrayList(),这个代替了我们传统的 new ArrayList<xx>,为什么在=的右边不需要泛型了呢,我们看看源码。

  1. public static <E> ArrayList<E> newArrayList() {
  2. return new ArrayList<E>();
  3. }

返回类型中带有泛型E,并且这个泛型的来源在 static和 ArrayList之间的位置,我自己的理解是这个就和=左边的一致,可能说的不够专业但是意思应该就这样。

于是我就依样画葫芦在自己的代码中也用了起来。

我要做的是一个仿httpsession机制的自定义协议是session。在httpsession.getAttribute方法返回的是一个
Object,然后我们再类型转换。现在我用返回类型泛型来优化这个代码,以下是我自定义协议session的getAttribute的代码。

  1. @SuppressWarnings("unchecked")
  2. public <E> E getAttribute(String key) {
  3. return (E) map.get(key);
  4. }

调用代码

  1. Boolean isFirst = session.getAttribute("first");

在httpsession中我们则要这么写

  1. Boolean isFirst = (Boolean)session.getAttribute("first");

泛型的用法还有很多,有新的心得再补充更新

Java返回类型泛型的用法小结的更多相关文章

  1. Java中static、final用法小结

    一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...

  2. Java中static、final用法小结(转)

    一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...

  3. java 枚举类型 构造函数及用法

    // 1. 定义枚举类型 public enum Light { // 利用构造函数传参 RED (1), GREEN (3), YELLOW (2); // 定义私有变量 private int n ...

  4. 在JAVA中返回类型使用泛型T和Object有什么区别?

    最近在读jackson源码的时候发现有段代码返回类型写的是<T> T,而我自己一般写的是Object.上网搜了下这个语法糖,在stackoverflow上找到一个比较简单易懂的解释,搬运过 ...

  5. java里程碑之泛型--类型通配符

    1,泛型与数组在子类上面的对比 在整理java泛型的类型通配符之前,我们先来研究下java在数组设计上的一个不合理.我们来看下面代码: public class Test { public stati ...

  6. Effective Java 第三版——47. 优先使用Collection而不是Stream来作为方法的返回类型

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  7. Java枚举类型的用法

    JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 1.用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fia ...

  8. MyBatis(八):Mybatis Java API枚举类型转化的用法

    最近工作中用到了mybatis的Java API方式进行开发,顺便也整理下该功能的用法,接下来会针对基本部分进行学习: 1)Java API处理一对多.多对一的用法: 2)增.删.改.查的用法: 3) ...

  9. 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List<类名>的比较

    1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam nam ...

随机推荐

  1. [置顶] IT屌丝的离职申请

          各位好,很遗憾在如此关键的时刻和大家说告别.我为金三也付出了近一年的心血,几乎没怎么休过令人舒心的周末,熬了多少夜更不用说,如此的离开,请相信我也非常心痛.       尽管直到现在我的水 ...

  2. cocos2dx进阶学习之屏幕适配

    背景 在学习cocos2dx时,我们在main函数中发现一句代码, #include "main.h" #include "AppDelegate.h" #in ...

  3. BZOJ 1621: [Usaco2008 Open]Roads Around The Farm分岔路口

    题目 1621: [Usaco2008 Open]Roads Around The Farm分岔路口 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 56 ...

  4. 深入浅出 JSTL

    JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的.这个算是一个java程序员的一个基本功吧. JSP Standard Tag Library (JSTL) 的规范完成于2002年7月, ...

  5. git 使用过程(二、创建版本库)

    1.显示当前git所在操作文件路径 命令:pwd  2.改变当前操作路径 命令:cd /e/神马神马的,如果想到当前文件夹的某个子目录下,可以直接输入命令:cd 子目录名称,这样就可以了. 3.创建一 ...

  6. android动画效果演示

    第一种:TranslateAnimation  动画效果演示: public void move(View view) { // 传统动画效果 TranslateAnimation animation ...

  7. ThinkPHP - 缓存使用

    用法: 需要使用不同的缓存方式的时候 需要重新初始化,如果不初始化直接调用的话,则会按照系统配置自动初始化.初始化的返回值,可以直接操作缓存: $cache = cache(array('type'= ...

  8. BZOJ 1216: [HNOI2003]操作系统( 优先队列 )

    按题意用priority_queue模拟即可 ---------------------------------------------------------------------- #inclu ...

  9. [转]Windows7 64bit下配置Apache+PHP+MySQL

    原文链接:http://blog.csdn.net/sbz0409/article/details/12946375 1.准备资料: 首先下载文件:Apache2.4.16 64bit,http:// ...

  10. Codeforces 509C Sums of Digits 贪心

    这道题目有人用DFS.有人用DP 我觉得还是最简单的贪心解决也是不错的选择. Ok,不废话了,这道题目的意思就是 原先存在一个严格递增的Arrary_A,然后Array_A[i] 的每位之和为Arra ...