`
webcode
  • 浏览: 6029993 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Java下的框架编程(2)-对泛型的没心没肺的用法和为擦拭法站台

阅读更多
作者:江南白衣

Java 5的泛型语法已经有太多书讲了,这里不再打字贴书。但真要理解泛式编程的使用,还是要回到它的故乡C++ 去,靠Java书上的例子只能学到syntax。
GP一定有用,不然Java和C#不会约好了似的同时开始支持GP。但大家也清楚,GP和Python式的动态OO语言属于不同的意识形态,如果是一人一票,我想大部分的平民程序员更热衷动态OO语言的平白自然。

我对GP的没心没肺的用法:
胡乱总结泛型的三点作用:
第一是泛化,可以拿个T代表任意类型。 但GP是被C++严苛的静态性逼出来的,落到Java、C#这样的花语平原里,所有对象除几个原始类型外都派生于Object,一样能够很泛,所以Java的Collection类没有范型一样过得好好的。再加上Java的反射功能,在泛的方面GP不占多大优势。
第二是收敛,就是增加了类型安全,减少了强制类型转换的代码。这点倒是Java Collection历来的弱项。
第三是可以在编译期搞很多东西,比如MetaProgramming。但除非能完全封闭于框架内部,框架的使用者和扩展者都不用学习这些东西的用法,否则那就是自绝于人民的票房毒药。C++的MetaProgramming好厉害吧,但对比一下Python拿Meta Programming生造一个Class出来的简便语法,就明白什么才是真正的叫好又叫座。

所以,作为一个架构设计师,只应该用Java泛型三样特质中的收敛特质,本着对人民负责的精神,用泛型使框架更加类型安全,更少强制类型转换。
而且Java GP的擦拭法实现,使框架的范型特性对使用者保持了可用可不用的选择。

擦拭法避免了Java的流血分裂:
大家经常骂Java GP的擦拭法实现,但我觉得多亏于它的中庸特性---如果你用就是范型,不用就是普通Object,避免了Java阵营又要经历一场to be or not to be的分裂。
最大的例子莫过Java 5的Collection 框架,比如有些同学坚持认为自己不会白痴到类型出错,而且难以忍受每个定义的地方都要带一个泛型定义List〈Goods〉<goods></goods>,不用强制类型转换所省下的代码还不够这里花的(对了,java里面还没有tyepdef.....),因此对范型十分不感冒,这时就要齐齐感谢这个搽拭法让你依然可以对一个泛型框架保持非泛型的用法了...

系列文章:
Java下的框架编写(1)--序
Java下的框架编程(2)-对泛型的无聊用法和为擦拭法站台
Java下的框架编程(3)--关于反射的碎话
Java下的框架编程(4)--Annotation vs XML vs Interface 最新一Round
Java下的框架编程(5)--cglib应用
Java下的框架编程(6)--asm(待写)
分享到:
评论

相关推荐

    Java 第二阶段提升编程能力【泛型】---- 代码

    Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力...

    java--泛型编程

    Java 泛型编程是Java语言在JDK 1.5版本引入的一项重要特性,它极大地提高了代码的安全性和可重用性。泛型本质上是参数化类型,允许我们在编写代码时,将数据类型作为参数,这使得类、接口和方法能够处理多种不同的...

    JAVA-泛型课件-泛型课件

    泛型为Java编程带来了类型安全和代码重用的优势,通过参数化类型的概念,允许开发者编写更通用、更健壮的代码。它减少了类型转换错误,并通过编译时的类型检查避免了运行时的异常。泛型的引入使Java集合框架的使用...

    JAVA设计模式--程序设计--反射--注解--泛型

    Java设计模式、程序设计、反射、注解和泛型是Java开发中的核心概念,它们各自在不同的场景下发挥着重要作用,构建出高效、可维护的软件系统。 首先,Java设计模式是面向对象编程中的一种最佳实践,是解决常见问题的...

    29-API-集合框架-泛型-使用_java_

    Java 泛型是Java编程语言中的一个重要特性,它在2004年随着Java SE 5.0的发布被引入。泛型的主要目的是提供类型安全,同时减少在编译时和运行时出现的类型转换错误。它允许程序员在定义类、接口和方法时指定参数类型...

    Java集合框架及泛型

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高效的数据结构和操作这些数据结构的方法。泛型则是Java在J2SE 5.0版本引入的一个特性,极大地提高了代码的类型安全性和可读性。下面我们将深入...

    C#学习之路--泛型

    它在.NET框架下运行,提供了一系列强大的特性和工具,其中泛型是C#中一个非常重要的概念,它允许开发者创建可重用的类型安全的代码,以适应多种数据类型。在“C#学习之路--泛型”这个主题中,我们将深入探讨泛型的...

    华科java实验-用泛型栈实现泛型队列

    试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...

    黑马程序员----泛型与反射的小运用

    在Java编程语言中,泛型和反射是两个非常重要的特性,它们在软件开发中有着广泛的应用。本篇文章将深入探讨这两个概念以及它们在实际开发中的小运用。 首先,我们来看泛型(Generics)。泛型是在Java SE 5.0引入的...

    java集合 框架 泛型

    Java集合框架是Java编程语言中一个至关重要的组成部分,它为数据存储和操作提供了丰富的类库。泛型是Java 5引入的一项创新特性,极大地增强了集合框架的安全性和效率。本讲解将深入探讨这两个主题,以及与之相关的...

    实例讲解Java泛型编程的快速入门

    Java 泛型编程是一种强大的工具,它允许我们在编写代码时引入类型参数,从而提高了代码的灵活性和安全性。泛型在Java中主要应用于类、接口和方法,使得程序员可以在编译时检查类型安全,并且可以消除运行时的类型...

    学士后Java集合框架和泛型课后习题答案

    Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的类库。在Java中,集合框架主要包括接口(如List、Set、Queue)和实现这些接口的类(如ArrayList、HashSet、LinkedList等)。这个...

    黑马程序员----泛型学习注意点

    在Java编程语言中,泛型(Generic)是一个强大的特性,它允许我们在编译时检查类型安全,并且可以消除运行时的类型转换。黑马程序员提供的这篇关于泛型的学习注意点,结合了源码分析和工具应用,旨在帮助开发者深入...

    很好的Java泛型的总结

    例如,add1(List&lt;Object&gt; list)方法只能添加Object类型的数据,add2(List&lt;?&gt; list)方法可以添加任何类型的数据,add3(List&lt;? extends Object&gt; list)方法可以添加Object或其子类的数据,add4(List&lt;? super Children&gt; ...

    Generic_2(泛型类-泛型方法-泛型接口-泛型限定(上限)

    在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。...

    05-java泛型的使用.doc

    Java 泛型是一种强大的特性,它允许在编程时指定容器(如列表、集合或映射)的元素类型,从而提供类型安全性和代码简洁性。在Java中,泛型是通过在类、接口或方法声明中使用类型参数来实现的。这使得开发者能够限制...

    关于java基础的泛型的练习

    Java泛型是Java SE 5.0引入的一个重要特性,它极大地增强了代码的类型安全性和可读性。泛型在编程中的应用广泛,特别是在集合框架中,使得我们可以在编译时就检查类型,避免了不必要的类型转换,并且提高了代码的...

    Java泛型研究.pdf

    * 在Java类和接口中,使用泛型可以定义类型安全的字段和方法,例如public class MyClass&lt;T&gt; { private T field; }。 * 在Java方法中,使用泛型可以定义类型安全的方法参数,例如public &lt;T&gt; void myMethod(T t)。 ...

Global site tag (gtag.js) - Google Analytics