`
simohayha
  • 浏览: 1403363 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

对java的范型发发牢骚

    博客分类:
  • java
阅读更多
上周看了一下java的范型,只有一个感觉,那就是真是个空壳子,太多的限制了。

特别是 类型擦除,直接字节码里把所有的类型都变成了object,简直无语.


这就是所谓的类型擦除:

引用

You cannot instantiate a type represented only as a type parameter, nor can you create an array of such a type. So for a type variable T you can't do newT() or newT[n] .

You cannot create an array whose element type is a parameterized type, with the exception of a parameterized type for which all the type arguments are unbounded wildcards. For example, "newList<String>[1] " is invalid, whereas "newList<?>[1] " is okay.

You cannot use instanceof to see if an object is an instance of a parameterized type, again with the exception of a parameterized type whose type arguments are all unbounded wildcards. The instanceof test is a runtime test, and at runtime the parameterized type has been replaced by its erasure. Since this is unlikely to perform the test you expected, the compiler rejects it. You can replace the parameterized type by its erasure if that is what you really wanted to test.

Casts involving type parameters or parameterized types are replaced with casts to the erasure of that type (see discussion below).

A catch clause cannot declare that it catches an exception represented by a type variableeven if the bound on that type variable is an exception type. The exact type of the exception must be known at compile time. (You can throw an exception so referenced, however, and you can declare the type variable in a method's throw clause.)

A generic class is not allowed to directly or indirectly extend Throwable. Given that you can't catch generic exceptions there is little point in being able to declare them.

You cannot use a parameterized type in a class literal expression (such as SingleLinkQueue<String>.class). This reinforces that there is but one class object.



比如这样的代码都是错的
public class DecimalString implements Comparable<Number>, Comparable<String>  


使用范型大家可以记住这条规则就好了 。
引用

The Get and Put Principle: use an extends wildcard when you only get values out of a structure, use a super wildcard when you only put values into a structure, and don't use a wildcard when you both get and put.

希望以后的java版本使范型类能根据不同的类型生产不同的版本.

大家还可以看看 布老大的这篇文章,也能加深下理解。

http://www.iteye.com/topic/22020


分享到:
评论

相关推荐

    Java 范型Java 范型.doc

    Java 范型Java 范型

    Java 范型攻略篇

    ### Java范型攻略篇:深度解析与应用 #### 一、引言:Java范型的引入 在Java的发展历程中,范型(Generics)的引入标志着语言设计上的一个重要里程碑。自Java 1.5发布以来,范型成为了Java语言的重要特性之一,极...

    JAVA范型指南中文版

    Java 泛型是一种在编程中实现强类型检查和减少冗余类型转换的机制,它是在JDK 1.5版本中引入的。泛型的主要目标是提高代码的类型安全性、可读性和重用性,避免在运行时出现类型转换异常。 1. **泛型的基本概念** -...

    java范型[参考].pdf

    Java泛型是Java 5版本引入的一个重要特性,极大地增强了代码的类型安全性和效率。泛型允许我们在编写类、接口和方法时指定一种或多种类型参数,使得代码能够处理多种不同类型的对象,同时在编译时进行严格的类型检查...

    java范型[参照].pdf

    Java泛型是Java 5版本引入的一个重要特性,极大地增强了代码的类型安全性和可读性。泛型允许我们在编写代码时指定容器(如List、Set、Map等集合类)能够存储的数据类型,从而避免了不必要的类型转换,并在编译时期就...

    java 泛型类的类型识别示例

    在Java编程语言中,泛型(Generics)是一种强大的特性,它允许我们在编写代码时...同时,`Java.jpg`可能是对这个概念的一个图形化解释或者示例的截图。通过学习和理解这些示例,你可以更好地掌握Java泛型类的类型识别。

    java范型视频

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...

    java范型学习

    Java 泛型是一种强大的语言特性,它在J2SE 5.0中引入,极大地提升了代码的类型安全性和效率。泛型允许我们在编写类、接口和方法时指定一种或多种类型参数,使得代码能够处理多种数据类型,同时避免了运行时的类型...

    Java程序设计范型和枚举PPT教案学习.pptx

    Java程序设计范型和枚举是Java编程中的关键概念,它们极大地增强了代码的类型安全性和重用性。本文将深入探讨这两个主题。 首先,我们来看什么是范型(Generics)。范型是Java SE 5.0引入的一个特性,它允许在类、...

    用Java Socket实现一个简单的基于P2P范型的即时聊天系统。

    在本文中,我们将深入探讨如何使用Java的Socket编程来实现一个简单的基于P2P(Peer-to-Peer)范型的即时聊天系统。P2P网络架构允许每个节点既是客户端也是服务器,这种模式使得数据传输更加分散,提高了系统的可扩展...

    Java 实现泛型List

    Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。

    对数据库范型的封装

    "对数据库范型的封装" 是一种软件设计模式,旨在提高代码的重用性和可维护性,它通过抽象出一套通用的方法来处理数据库的增(Insert)、删(Delete)、改(Update)操作。在C#中,我们可以创建一个名为`SQLHelper`的...

    范型参考 (1).java

    范型参考 (1).java

    范型参考 (2).java

    范型参考 (2).java

    C++多范型设计

    通过阅读本书,开发者不仅可以提升对C++模板机制的理解,还能掌握如何在实际开发中有效利用模板进行设计和实现,从而提高代码质量并减少重复工作。 总之,《C++多范型设计》是一本深入浅出的C++模板编程指南,对于...

    Java如何获取泛型类型

    参考:我眼中的Java-Type体系(1) 我眼中的Java-Type体系(2) 秒懂Java类型(Type)系统 Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现...

    一个很好的范型立例题

    Java范型是Java编程语言中的一个重要特性,它允许在类、接口和方法中使用类型参数,从而提高了代码的重用性和安全性。范型在Java中引入的主要目标是增强类型安全,减少强制类型转换,并帮助开发者编写更清晰、更易于...

    论文研究-消息传递范型与C/S范型双范型的主数据管理机制 .pdf

    本文提出的基于消息传递范型和客户机/服务器(Client/Server,简称C/S)范型双范型的主数据管理机制,能够有效解决MDM面临的问题。 消息传递范型是计算机科学中的一个基本概念,用于描述进程间通信的方式。在这范型...

    范型程序设计与 STL.pdf

    《范型程序设计与 STL》是一本深入探讨C++编程中的关键概念和技术的书籍,主要聚焦于范型(Generic Programming)和标准模板库(Standard Template Library,简称STL)。范型编程是一种强大的软件开发方法,它允许...

Global site tag (gtag.js) - Google Analytics