java在jdk1.5引入了泛型,我们在定义类的时候可以给给它传递一个参数代码如下:
package test;
public class GenericClass<T> {
private Object[] elements;
private static final int DEFAULT_CAPACITY = 10;
private int size = 0;
public GenericClass(){
elements = new Object[DEFAULT_CAPACITY];
}
public void add(T object){
elements[size++] = object;
}
public T get(int index){
if(index <0 || index >= elements.length){
throw new IllegalArgumentException("参数不合法");
}
return (T)elements[index];
}
public int size(){
return size;
}
public boolean isEmpty(){
return size == 0;
}
public static void main(String[] args) {
GenericClass<String> genericClass = new GenericClass<String>();
//这里我们只能传入string 类型的参数,传入其他的参数编译无法通过
genericClass.add("aa");
//这里也不用使用向下类型转换了
String s = genericClass.get(0);
}
}
同样的我们也可以定义泛型方法
package com.gson.learn;
public class GenericMethod<K> {
public <T> T createObject(Class<T> myClass){
T obj = null;
try {
obj = myClass.newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return obj;
}
}
定义了一个泛型的方法,这里的方法的<T> 和类的<k>没有任何关系,一个是方法的,一个是类的,传入的是什么类型的class返回的就是什么类型的对象:
@Test
public void testGeneric(){
GenericMethod<Object> gm = new GenericMethod<Object>();
Car d = gm.createObject(Car.class);
}
在创建泛型类GenericClass<T>对象时,T可以是任何类型,我们可以在定义泛型类的时候
限制泛型的类型
package com.gson.learn;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import test.Car;
public class GenericLimit<K extends Serializable> {
public void saveObjectToFile(K obj) throws FileNotFoundException, IOException{
File f = new File("object.dat");
ObjectOutputStream ois = new ObjectOutputStream(new FileOutputStream(f));
ois.writeObject(obj);
}
public static void main(String[] args) throws FileNotFoundException, IOException {
GenericLimit<String> genericLimit = new GenericLimit<String>();
genericLimit.saveObjectToFile("我是一个学生");
//这里传car 编译器提示绑定不匹配,避免我们传入没有实现serializeble接口的类
GenericLimit<Car> genericLimit1 = new GenericLimit<Car>();
}
}
注意:<T extends Serializable> 这里Serializable虽然是接口但这里只能用extends,不能使用implements。
最后说一下Class<?> 它等价于Class<T extends Object>,学java的都知道,所有的类都是Object的子类,Class<?> 是Class<T extends Object>的简写形式,指向Object子类的字节码对象。
分享到:
相关推荐
Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南
Java Generics and Collections 英文版,详细描述java 泛型技术
java 泛型类的类型识别示例 java 泛型类的类型识别示例 java 泛型类的类型识别示例
java 泛型接口示例 java 泛型接口示例 java 泛型接口示例
主要介绍了Java泛型的用法及T.class的获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java 泛型方法使用示例 java 泛型方法使用示例 java 泛型方法使用示例
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
java泛型技术之发展,学习JAVA 泛型的不错东东
Java 泛型使用详细分析 Java 泛型是 Java 语言中的一种类型系统特性,允许开发者在编译期检查类型安全,以避免在运行时出现类型相关的错误。在本文中,我们将详细介绍 Java 泛型的使用方法和实现原理。 一、泛型的...
1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1....
很好的Java泛型的总结,看完之后你一定会知道java泛型的底层机制,你一定会学会Java泛型!
4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip...
java,学习java泛型,java培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptx
深入理解java泛型,包括类名泛型的定义,方法泛型定义,泛型的返回
Sun公司的Java泛型编程文档,英文原版和网络翻译版,想对泛型有更清楚的认识的朋友可以看看,必定会有所帮助
java泛型详解.pdf
JAVA泛型源代码实现以下功能:返回数组元素的最大值/最小值下标;判断数组元素是否按升序排列;T对象数组排序;二分法查找key元素;
思维导图之Java泛型详解
Java泛型技术之发展