Java中范型的作用

在JDK1.5之后引入了 范型的概念,到底什么事范型的,在一段时间内 我也是很模糊 。。。。

下面我用一个 ArrayList 来演示范型的作用  。

我们知道ArrayList 可以看做是一个线性表  ,  我们在为进行范型规范化的时候,这个线性表中可以存储的原始类型  可以是各种各样的类型 ,这就说明一个表中 存储了不同类型的数据 。  这样做很不安全,而且容易出错 。

看下面一段代码,JAVA5以前 的版本

ArrayLsit  col=new ArrayList()  ;

col.add(1) ;

col.add("string") ;

col.add(false)  ;

......

看到上面一个ArrayList中存储各种各样的 类型的元素  

JDK1.5进行范型规范后Generic

ArrayList <Integer>   col=new ArrayList()  ;

col.add(1)   ;//可以

 col.add("string") ; //会报错,因为进行了范型规范之后 这个线性表中只能存储 Integer类型的数据   ,

这样做就很好的保证了集合类型的唯一性、。。。。。

 

 

以上只是范型的简单应用,范型在反射中也应用到了  。看下面一段代码 

  Constructor  con=String.class.getConstructor(StringBuffer.class) ; 
  String str=(String) con.newInstance(new StringBuffer("xiaowei"));      //注意 这里我们对于String的构造方法映射类 创建的对象需要强制转换
  System.out.println(str);

 

但是进行了范型规范之后就不需要了 ,这就是范型的作用 。

Constructor<String>  con=String.class.getConstructor(StringBuffer.class) ; 
  String str=con.newInstance(new StringBuffer("xiaowei"));
  System.out.println(str);  

 

 范型是给编译器看的,在编译字节码文件之后 就会去类型化  

 

 

 

 

 

 

 

 

 

 

时间: 2024-07-30 23:32:19

Java中范型的作用的相关文章

Java自定义范型的应用技巧

我们在JAVA中处处都用到了范型,JAVA中的范型是从C++模板继承来的,不过JAVA的范型的功能远远没有C++那么强大. 我们知道在C++中模板可以很方便的代替任意类型的数据如下: template<class T> void show(T x) { cout<<x<<endl ; } 上面的T可以代表任意类型的数据,这样不是大大减少了函数的重载次数,提高了效率呢.java是从C++过来的,理解了C++,jav也不在话下. 在java中自定义范型也可以用在方法上如下:

JAVA中toString方法的作用

以下是对在JAVA中toString方法的作用进行了详细的分析介绍,需要的朋友可以参考下   因为它是Object里面已经有了的方法,而所有类都是继承Object,所以"所有对象都有这个方法". 它通常只是为了方便输出,比如System.out.println(xx),括号里面的"xx"如果不是String类型的话,就自动调用xx的toString()方法 总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法  回答补充:写这个

java-求助,Java中对象序列化的作用是什么?

问题描述 求助,Java中对象序列化的作用是什么? Java中对象序列化的作用是什么?求大神相助,希望能全面一点哦.急求大神解答 解决方案 简单来说,对象像一颗树,里面有字段,如果字段是类型,那么它还有自己的字段. 但是网络传输.保存文件,都必须是线性的,连续的. 序列化就是把这棵树拍扁,成为一个序列的过程. 反序列化就是从一个序列中重新把这颗树拉回来的过程. 解决方案二: 把一个对象,转成流数据,对方根据这个数据还原成初始对象,适用于不同对象间的传输,通讯 解决方案三: 序列化多用于网络IO通

范型 继承-java 简单范型问题,请大家看看

问题描述 java 简单范型问题,请大家看看 超类 public abstract Class Test { abstract public List getList(); } 子类 public Class TestImpl extends Test { public List getList() { return null; } } ide提示method does not override method form its superclass 解决方案 你这哪是泛型问题,没看提示吗:不能重

全面了解Java中Native关键字的作用_java

初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: public native int hashCode(); 为什么有个native呢?这是我所要学习的地方.所以下面想要总结下native. 一.认识 native 即 JNI,Java Native Interface 凡是一种语言,都希望是纯.比如解决某一个方案都喜欢就单单这个语言来写即可.Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Ja

Java中volatile关键字的作用与用法详解_java

volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以重获生机. volatile 关键字作用是,使系统中所有线程对该关键字修饰的变量共享可见,可以禁止线程的工作内存对volatile修饰的变量进行缓存. volatile 2个使用场景: 1.可见性:Java提供了volatile关键字来保证可见性. 当一个共享变量被volatile修饰时,它会保证修

实例讲解Java中的接口的作用

接口的作用 接口的作用简单一点就是:接口是用来标记类的,不同的类属于不同的接口(通过向上转型),管理接口比管理各种各样的类方便多了,接口体现了抽象的观点,什么是抽象?抽象就是"抽去像的部分". 使用接口解决问题 问题:现在我们要写个连接数据库的类给用户使用,有两个函数:一个返回Connection对象,另一个是关闭数据库,close(),一般的解决方法是:给每个数据库写一个类,再根据用户使用的数据库决定使用具体的类. 好的,我们看看这样有什么不好之处: (1).首先每个类都要有重复的代

java中Class.forName的作用浅谈_java

Class.forName(xxx.xx.xx) 返回的是一个类 一.首先你要明白在java里面任何class都要装载在虚拟机上才能运行. 1. forName这句话就是装载类用的(new是根据加载到内存中的类创建一个实例,要分清楚).   至于什么时候用,可以考虑一下这个问题,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?     A a = (A)Class.forName("pacage.A").newInstance();        这和          

Java中static关键字的作用和用法详细介绍_java

static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是