知识大全 Java5泛型 T.class的获取和为擦拭法站台

Posted 类型

篇首语:亦余心之所善兮,虽九死其犹未悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java5泛型 T.class的获取和为擦拭法站台相关的知识,希望对你有一定的参考价值。

Java5泛型 T.class的获取和为擦拭法站台  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Java 的泛型语法已经有太多书讲了 这里不再打字贴书 GP一定有用 不然Java和C#不会约好了似的同时开始支持GP 但大家也清楚 GP和Ruby式的动态OO语言属于不同的意识形态 如果是一人一票 我想大部分的平民程序员更热衷动态OO语言的平白自然 但如果不准备跳槽到支持JSR 的动态语言 那还是看看GP吧

  胡乱总结泛型的四点作用

  第一是泛化 可以拿个T代表任意类型 但GP是被C++严苛的静态性逼出来的 落到Java C#这样的花语平原里 所有对象除几个原始类型外都派生于Object 再加上Java的反射功能 Java的Collection库没有范型一样过得好好的

  第二是泛型 + 反射 原本因为Java的泛型拿不到T class而觉得泛型没用 最近才刚刚学到通过反射的API来获取T的Class 后述

  第三是收敛 就是增加了类型安全 减少了强制类型转换的代码 这点倒是Java Collection历来的弱项

  第四是可以在编译期搞很多东西 比如MetaProgramming 但除非能完全封闭于框架内部 框架的使用者和扩展者都不用学习这些东西的用法 否则那就是自绝于人民的票房毒药 C++的MetaProgramming好厉害吧 但对比一下Python拿Meta Programming生造一个Class出来的简便语法 就明白什么才是真正的叫好又叫座

  所以 作为一个架构设计师 应该使用上述的第 项用法 在框架类里配合使用反射和泛型 使得框架的能力更强 同时采用收敛特性 本着对人民负责的精神 用泛型使框架更加类型安全 更少强制类型转换

  擦拭法避免了Java的流血分裂

  大家经常骂Java GP的擦拭法实现 但我觉得多亏于它的中庸特性 如果你用就是范型 不用就是普通Object 避免了Java阵营又要经历一场to be or not to be的分裂

  最大的例子莫过Java 的Collection 框架 比如有些同学坚持认为自己不会白痴到类型出错 而且难以忍受每个定义的地方都要带一个泛型定义List〈Book〉 不用强制类型转换所省下的代码还不够N处定义花的(对了 java里面还没有tyepdef ) 因此对范型十分不感冒 这时就要齐齐感谢这个搽拭法让你依然可以对一个泛型框架保持非泛型的用法了

  通过反射获得 T class

  不知为何书上不怎么讲这个 是差沙告诉我才知道的 最经典的应用见Hibernate wiki的Generic Data Access Objects 代码如下   abstract public class BaseHibernateEntityDao<T> extends HibernateDaoSupport

  private Class<T> entityClass;

  public BaseHibernateEntityDao()

  entityClass =(Class<T>) ((ParameterizedType) getClass()

   getGenericSuperclass()) getActualTypeArguments()[ ];

  

  public T get(Serializable id)

  T o = (T) getHibernateTemplate() get(entityClass id);

  

  

  精华就是这句了

  Class<T> entityClass = (Class<T>) ((ParameterizedType) getClass() getGenericSuperclass()) getActualTypeArguments()[ ];

  泛型之后 所有BaseHibernateEntityDao的子类只要定义了泛型 就无需再重载getEnttityClass() get()函数和find()函数 销益挺明显的 所以SpringSide的Dao基类毫不犹豫就泛型了

  不过擦拭法的大棒仍在 所以子类的泛型语法可不能乱写 最正确的用法只有

cha138/Article/program/Java/hx/201311/27207

相关参考

知识大全 Java5 并发线程学习

Java5并发线程学习  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Java之后并发线程这块

知识大全 使用Java5特性来简化反射编程

使用Java5特性来简化反射编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!//Nextdoal

知识大全 .NET 泛型方法

.NET泛型方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  泛型方法  泛型方法是使用类型参

知识大全 泛型(一)

Java学习笔记:泛型(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一为什么需要泛型&n

知识大全 java泛型编程

  JDK令我们期待很久可是当他发布的时候却更换版本号为这说明Java已经有大幅度的变化本文将讲解JDK支持的新功能Java的泛型  Java泛型  其实Java的泛型就是创建一个用类型作为参数的类就

知识大全 JDK 5.0中的泛型类型学习

JDK5.0中的泛型类型学习  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JDK中增加的泛型类

知识大全 构建可反转排序的泛型字典类(1)--雏形

  前言  前段时间为了查找泛型资料我翻译了OReilly出版的《C#Cookbook》这本书的几个关于泛型的章节其中反转SortedList里的内容(见)这一节中有一个接近行代码的例子当时看到这个例

知识大全 Java泛型编程之诀窍

Java泛型编程之诀窍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &nb

知识大全 泛型编程:模板特殊化

PureC++:泛型编程:模板特殊化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在上一期专栏

知识大全 java中使用泛型

  泛型是在jdk之后才出现的一种机制说简单点就是一个特定的对象可以接收任何的对象例如杯子可以装水也可以装饮料说简单点就是来者不拒什么都要下面我就来写个小例子看一下  写一个接口Info里面什么方法都