`
yun342173024
  • 浏览: 74122 次
  • 性别: 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泛型编程指南知识点详解 #### 一、绪论:理解Java泛型的重要性与背景 **1.1 泛型的基本概念** 泛型是一种在编程语言中支持编写类型安全的通用函数或类的能力。在Java中引入泛型的主要目的是为了提供更...

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

    Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...

    Java泛型三篇文章,让你彻底理解泛型(super ,extend等区别)

    Java 泛型详解 Java 泛型是 Java SE 5.0 中引入的一项特征,它允许程序员在编译时检查类型安全,从而减少了 runtime 错误的可能性。泛型的主要优点是可以Reusable Code,让程序员编写更加灵活和可维护的代码。 ...

    Java泛型应用实例

    Java泛型是Java编程语言中的一个强大特性,它允许我们在定义类、接口和方法时指定类型参数,从而实现代码的重用和类型安全。在Java泛型应用实例中,我们可以看到泛型如何帮助我们提高代码的灵活性和效率,减少运行时...

    很好的Java泛型的总结

    Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...

    java 泛型类的类型识别示例

    综上所述,虽然Java泛型在编译后会进行类型擦除,但通过上述技巧,我们仍然能够在运行时获得关于泛型类实例化类型的一些信息。在实际开发中,这些方法可以帮助我们编写更加灵活和安全的代码。在示例文件`GenericRTTI...

    java泛型技术之发展

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...

    SUN公司Java泛型编程文档

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入。这个特性极大地提高了代码的类型安全性和可读性,减少了在运行时出现ClassCastException的可能性。SUN公司的Java泛型编程文档,包括...

    java 泛型接口示例

    下面我们将详细探讨Java泛型接口的相关知识点。 1. **泛型接口的定义** 泛型接口的定义方式与普通接口类似,只是在接口名之后添加了尖括号`&lt;T&gt;`,其中`T`是一个类型参数,代表某种未知的数据类型。例如: ```java...

    java 泛型方法使用示例

    下面我们将深入探讨Java泛型方法的概念、语法以及使用示例。 **一、泛型方法概念** 泛型方法是一种具有类型参数的方法,这些类型参数可以在方法声明时指定,并在方法体内部使用。与类的泛型类似,它们提供了编译时...

    Java 泛型擦除后的三种补救方法

    Java 泛型是一种强大的工具,它允许我们在编程时指定变量的类型,提供了编译时的类型安全。然而,Java 的泛型在运行时是被擦除的,这意味着在运行时刻,所有的泛型类型信息都会丢失,无法直接用来创建对象或进行类型...

    java泛型的内部原理及更深应用

    Java泛型是Java编程语言中的一个强大特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。这使得代码更加安全、可读性更强,并且能够减少类型转换的必要。在“java泛型的内部原理及更深应用”这个...

    JAVA泛型加减乘除

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

    java泛型总结

    ### Java泛型总结 #### 一、Java泛型概述 Java泛型是在JDK5之后引入的一个特性,它提供了一种类型安全的机制,用于指定集合或其他数据结构中的元素类型。通过使用泛型,程序员可以在编译阶段检测类型错误,避免了...

    java泛型学习ppt

    "Java 泛型学习" Java 泛型是 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的...

    Java泛型使用详细分析.pdf

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

    Java泛型技术之发展.pdf

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...

    Java泛型类型擦除后的补偿

    本文将深入探讨Java泛型类型擦除的概念,并介绍在类型擦除后,为了保持泛型的安全性和便利性,Java设计者所采取的一些补偿机制。 1. **类型擦除**: - 在编译期间,所有的泛型类型信息都会被替换为它们的实际类型...

Global site tag (gtag.js) - Google Analytics