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. Jsunpack

    http://www.baidu.com/#wd=jsunpack&rsv_bp=0&tn=baidu&rsv_spt=3&ie=utf-8&rsv_sug3= ...

  2. python 中 json的处理

    python中的json对象,其实就是字典类型. 利用json模块,可以将字符串类型的json串转换为 json对象(字典对象),也可以将json对象(字典对象)转换为字符串对象. 代码如: #cod ...

  3. 谷歌三大核心技术(一)The Google File System中文版

    谷歌三大核心技术(一)The Google File System中文版  The Google File System中文版 译者:alex 摘要 我们设计并实现了Google GFS文件系统,一个 ...

  4. cocos2d-x游戏开发系列教程-超级玛丽10-怪物与马里奥冲突检测

    在超级玛丽游戏中,马里奥在移动,怪物也在移动,当他们遇见时,需要判断是马里奥身亡还是怪物身亡. 这个判断的代码在怪物类的检测函数实现中. 比如蘑菇怪的冲突检测函数: bool CMMonsterMus ...

  5. java学习之观察者设计模式

    package com.gh.observer; import java.util.Observable; /** * 被观察者对象 * 必须继承被观察者抽象类 * @author ganhang * ...

  6. H264格式具体说明

    一 H.264句法1.1元素分层结构H.264编码器输出的Bit流中,每一个Bit都隶属于某个句法元素.句法元素被组织成有层次的结构,分别描写叙述各个 一 H.264句法 1.1元素分层结构 H.26 ...

  7. 【IE】trim()方法失效

    今天用了$.ajax异步提交,结果在ie8里面报错了,说不支持此对象,找了半天没找到什么问题. 后来发现是我data里面的参数传递,里面有个参数用到了trim()方法,这个方法在ie8里面是失效的. ...

  8. myeclipse8.5如何注册,转自他出

    Step: 1.建立一个任意名称的Java Project 2.在该工程中建立一个名文MyEclipseGen的Java文件(MyEclipseGen.java) 3.运行下面的代码,会在控制台出现& ...

  9. python读写xml

    来自http://blog.csdn.net/liuyuehui110/article/details/7287897 备份防止链接失效 一.XML的读取. 在 NewEdit 中有代码片段的功能,代 ...

  10. Linux 下github的使用

    *初始化git仓库,使用git init命令 *添加文件到git仓库分两步: 1.使用git add filename  :可分多次使用,添加多个文件到暂存区 2.使用git commit -m  “ ...