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泛型编程指南知识点详解 #### 一、绪论:理解Java泛型的重要性与背景 **1.1 泛型的基本概念** 泛型是一种在编程语言中支持编写类型安全的通用函数或类的能力。在Java中引入泛型的主要目的是为了提供更...
Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...
Java 泛型详解 Java 泛型是 Java SE 5.0 中引入的一项特征,它允许程序员在编译时检查类型安全,从而减少了 runtime 错误的可能性。泛型的主要优点是可以Reusable Code,让程序员编写更加灵活和可维护的代码。 ...
Java泛型是Java编程语言中的一个强大特性,它允许我们在定义类、接口和方法时指定类型参数,从而实现代码的重用和类型安全。在Java泛型应用实例中,我们可以看到泛型如何帮助我们提高代码的灵活性和效率,减少运行时...
Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...
综上所述,虽然Java泛型在编译后会进行类型擦除,但通过上述技巧,我们仍然能够在运行时获得关于泛型类实例化类型的一些信息。在实际开发中,这些方法可以帮助我们编写更加灵活和安全的代码。在示例文件`GenericRTTI...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入。这个特性极大地提高了代码的类型安全性和可读性,减少了在运行时出现ClassCastException的可能性。SUN公司的Java泛型编程文档,包括...
下面我们将详细探讨Java泛型接口的相关知识点。 1. **泛型接口的定义** 泛型接口的定义方式与普通接口类似,只是在接口名之后添加了尖括号`<T>`,其中`T`是一个类型参数,代表某种未知的数据类型。例如: ```java...
下面我们将深入探讨Java泛型方法的概念、语法以及使用示例。 **一、泛型方法概念** 泛型方法是一种具有类型参数的方法,这些类型参数可以在方法声明时指定,并在方法体内部使用。与类的泛型类似,它们提供了编译时...
Java 泛型是一种强大的工具,它允许我们在编程时指定变量的类型,提供了编译时的类型安全。然而,Java 的泛型在运行时是被擦除的,这意味着在运行时刻,所有的泛型类型信息都会丢失,无法直接用来创建对象或进行类型...
Java泛型是Java编程语言中的一个强大特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。这使得代码更加安全、可读性更强,并且能够减少类型转换的必要。在“java泛型的内部原理及更深应用”这个...
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
### Java泛型总结 #### 一、Java泛型概述 Java泛型是在JDK5之后引入的一个特性,它提供了一种类型安全的机制,用于指定集合或其他数据结构中的元素类型。通过使用泛型,程序员可以在编译阶段检测类型错误,避免了...
"Java 泛型学习" Java 泛型是 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的...
Java 泛型使用详细分析 Java 泛型是 Java 语言中的一种类型系统特性,允许开发者在编译期检查类型安全,以避免在运行时出现类型相关的错误。在本文中,我们将详细介绍 Java 泛型的使用方法和实现原理。 一、泛型的...
Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...
本文将深入探讨Java泛型类型擦除的概念,并介绍在类型擦除后,为了保持泛型的安全性和便利性,Java设计者所采取的一些补偿机制。 1. **类型擦除**: - 在编译期间,所有的泛型类型信息都会被替换为它们的实际类型...