`
yun342173024
  • 浏览: 73036 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 泛型

    博客分类:
  • java
 
阅读更多
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

    Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南

    Java泛型和集合

    Java Generics and Collections 英文版,详细描述java 泛型技术

    java 泛型类的类型识别示例

    java 泛型类的类型识别示例 java 泛型类的类型识别示例 java 泛型类的类型识别示例

    java 泛型接口示例

    java 泛型接口示例 java 泛型接口示例 java 泛型接口示例

    Java泛型的用法及T.class的获取过程解析

    主要介绍了Java泛型的用法及T.class的获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java 泛型方法使用示例

    java 泛型方法使用示例 java 泛型方法使用示例 java 泛型方法使用示例

    JAVA泛型加减乘除

    这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...

    java泛型技术之发展

    java泛型技术之发展,学习JAVA 泛型的不错东东

    Java泛型使用详细分析.pdf

    Java 泛型使用详细分析 Java 泛型是 Java 语言中的一种类型系统特性,允许开发者在编译期检查类型安全,以避免在运行时出现类型相关的错误。在本文中,我们将详细介绍 Java 泛型的使用方法和实现原理。 一、泛型的...

    1.java泛型定义.zip

    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泛型的底层机制,你一定会学会Java泛型!

    4.java泛型的限制.zip

    4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip...

    java泛型学习ppt

    java,学习java泛型,java培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptx

    java泛型总结

    深入理解java泛型,包括类名泛型的定义,方法泛型定义,泛型的返回

    SUN公司Java泛型编程文档

    Sun公司的Java泛型编程文档,英文原版和网络翻译版,想对泛型有更清楚的认识的朋友可以看看,必定会有所帮助

    java泛型详解.pdf

    java泛型详解.pdf

    JAVA泛型简单排序实例

    JAVA泛型源代码实现以下功能:返回数组元素的最大值/最小值下标;判断数组元素是否按升序排列;T对象数组排序;二分法查找key元素;

    思维导图之Java泛型详解

    思维导图之Java泛型详解

    Java泛型技术之发展

    Java泛型技术之发展

Global site tag (gtag.js) - Google Analytics