泛型是JDK1.5的新特性
1.泛型类
没有泛型之前,一个类的属性有的地方是Integer,有的地方需要是String,这时为了写一个通用的类,我们设置一个类的属性为Object,虽然满足了我们的要求,但是它的属性什么类型都可以设置,因此会产生不安全性。
public class Info {
private Object x;
private Object y;
public Object getX() {
return x;
}
public void setX(Object x) {
this.x = x;
}
public Object getY() {
return y;
}
public void setY(Object y) {
this.y = y;
}
}
在调用这个类时
Info i = new Info();
i.setX(11);
i.setY("helllo");
Integer x = (Integer) i.getX();//需要向下转换类型
String y = (String) i.getY();
System.out.println(x+":"+y);
而且,当我们上面代码换成
Info i = new Info();
i.setX(11);
i.setY("helllo");
Integer x = (Integer) i.getX();
Integer y = (Integer) i.getY();
System.out.println(x+":"+y);
eclipse是不会报错的,但是运行时就会出现类型转换错误,他无法把“helllo”这个字符串转换成Integer。泛型的出现解决了这个问题。
泛型类的写法很简单,只要在类名后跟<T>就行,T可以写成其他字母,T表示type,属性的类型设置为T,由外部决定。调用这个泛型类时,需要指定T的具体类型
package com.luo;
public class Demo<T> {
private T x;
private T y;
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
public T getY() {
return y;
}
public void setY(T y) {
this.y = y;
}
}
泛型的调用:
Demo<Integer> demo = new Demo<Integer>();
demo.setX(12);
demo.setY(14);
这样demo的属性只能设置为Integer类型
泛型类也可以public class Demo<T,D>{}这样写
构造方法也可以这样写
public Demo(T x,T y){
this.x = x;
this.y= y;
}
泛型的擦除
Demo d = new Demo();表示泛型的擦除,他将按照Object类型来执行程序,也可以
Demo<Object> d = new Demo<Object>();但是上面的写法有些多余,因此产生了通配符
2.通配符?
在一个方法中,参数我希望传递一个Demo泛型对象,我希望这个泛型既可以是Demo<Integer>也可以是Demo<String>,这时我可以简单的使用Demo 就可,不带<>,但是eclipse会报黄线;然而即使用Demo<Object>它都会报错的,于是我们使用Demo<?>来表示
public static void main(String[] args) {
Demo<Integer> d1 = new Demo<Integer>();
Demo<String> d2 = new Demo<String>();
fun(d1);
fun(d2);
}
public static void fun(Demo<?> d){}
2.1泛型上限 “? extends 类” 和泛型下限 “? super 类”
泛型上限表示能接收的具体类只能是extends的类的子类和该类本身
public class Demo2<T extends Number> {
}
Demo2<Integer> dd = new Demo2<Integer>();//正确
Demo2<String> dd = new Demo2<String>();//出错的
泛型上限也可以在方法上使用
public static void fun(Demo<? extends Number> d){}
那么:
Demo<Integer> d1 = new Demo<Integer>();
Demo<String> d2 = new Demo<String>();
fun(d1);//正确
fun(d2);//错误
2、泛型方法
泛型方法所在类不一定是泛型类,格式为:
public class Info {
public <T>T test(T param){
return param;
}
}
<T>T 就相当于String或者void,传入的参数一般也设置为T类型的
public <T>T test(String param){ //否则这样的有什么意义?
return (T) param;
}
泛型方法也可以返回一个泛型数组
public <T>T[] print(T ...params){
return params;
}
public static void main(String[] args) {
Info i = new Info();
Integer[] ss1 = i.print(new Integer[]{1,2,3,4});
Integer[] ss2 = i.print(1,2,3,4);//要学习这种写法
}
public <T>T[] print(T ...param){
return param;
}
分享到:
相关推荐
JDK1.5泛型讲解 不错的东西 对jdk需要研究的朋友不妨看看 新手也来学习学习```
JDK1.5泛型 里面有很多的例子供大家学习
泛型的使用文档,教你在JDK1.5中如何使用泛型
JDK1.5的泛型实现.pdf
JDK1.5的泛型实现
JDK1.5新特性泛型_深入研究JDK1.5新特性泛型_深入研究JDK1.5新特性泛型_深入研究
java经典教程-JDK1.5的泛型实现
今天,JDK1.5終於內建泛型特性,不僅編譯器不再需要 任何外力(外掛附件)的幫助,整個 Java標準程式庫也被翻新(retrofit),許多 角落針對泛型做了改寫。 讓我們把帶有「參數化型別」(parameterized types)的 ...
JDK1.5的泛型实现
“JDK1.5”(开发代号猛虎)的一个重要主题就是通过新增一些特性来简化开发,这些特性包括泛型,for-else 循环,自动装包/拆包,枚举,可变参数, 静态导入
jdk1.5的新特性泛型的实例代码,很好的学习资料
Windows 64位环境的JDK1.5。Java SE Development Kit(jdk下载)是Java语言软件开发工具包,是整个Java的核心所在,一些开发应用都需要安装Java JDK环境。自从Java推出以来,JDK已经成为使用最广泛的Java SDK,JDK是...
jdk1.5新特性 泛类型和泛型方法是Java5.0 中的新特性。一种泛类型用一个或多个泛型变量定义,可以有一个或多个,泛型变量做参数占位符或做返回值 的方法。
jdk1.5的以后的技术,例如泛型,枚举,注释的基本使用方法,给刚学习java的朋友一些不错的介绍
java编程的泛型实现
jdk1.5新特性,泛型,for:each
Java SE Development Kit(jdk下载)是Java语言软件开发工具包,是整个Java的核心所在,一些开发应用都需要安装Java JDK...从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高
Java的泛型和动态参数,以及for循环的使用Connections类的详解,list,set的详解
“JDK1.5”(开发代号猛虎)的一个重要主题就是通过新增一些特性来简化开发,这些特性包括泛型,for-each 循环,自动装包/拆包,枚举,可变参数, 静态导入 。使用这些特性有助于我们编写更加清晰,精悍,安全的...