一、泛型接口
1、第一种:在子类的定义上也声明泛型类型。
package com.xieke.generics.impl.demo1; interface Info<T> { // 在接口上定义泛型 public T getVar(); // 定义抽象方法,抽象方法的返回值就是泛型类型 } class InfoImpl<T> implements Info<T> { // 定义泛型接口的子类 private T var; // 定义属性 public InfoImpl(T var) { // 通过构造方法设置属性内容 this.setVar(var); } public void setVar(T var) { this.var = var; } @Override public T getVar() { return this.var; } }; /** * 泛型接口实现的两种方式 * * 第一种:在子类的定义上也声明泛型类型 * * @author xieke * */ public class GenericsDemo1 { public static void main(String arsg[]) { Info<String> i = null; // 声明接口对象 i = new InfoImpl<String>("xieke"); // 通过子类实例化对象 System.out.println("内容:" + i.getVar()); } };
2、第二种:子类不使用泛型声明,在实现接口的时候直接指定好其具体的操作类型。
package com.xieke.generics.impl.demo2; interface Info<T> { // 在接口上定义泛型 public T getVar(); // 定义抽象方法,抽象方法的返回值就是泛型类型 } class InfoImpl implements Info<String> { // 定义泛型接口的子类 private String var; // 定义属性 public InfoImpl(String var) { // 通过构造方法设置属性内容 this.setVar(var); } public void setVar(String var) { this.var = var; } @Override public String getVar() { return this.var; } }; /** * 泛型接口实现的两种方式 * * 第二种:子类不使用泛型声明,在实现接口的时候直接指定好其具体的操作类型 * * @author xieke * */ public class GenericsDemo2 { public static void main(String arsg[]) { Info i = null; // 声明接口对象 i = new InfoImpl("xieke"); // 通过子类实例化对象 System.out.println("内容:" + i.getVar()); } };
二、泛型方法
1、第一种形式:接收任意类型的数据。
package com.xieke.generics.method.demo1; class Demo { public <T> T fun(T t) { // 可以接收任意类型的数据 return t; // 直接把参数返回 } }; /** * 定义泛型方法 * * @author xieke * */ public class GenericsDemo1 { public static void main(String args[]) { Demo d = new Demo(); // 实例化Demo对象 String str = d.fun("xieke"); // 传递字符串 int i = d.fun(22); // 传递数字,自动装箱 System.out.println(str); // 输出内容 System.out.println(i); // 输出内容 } };
2、第二种形式:指定上限数据类型。
package com.xieke.generics.method.demo2; class Info<T extends Number> { // 指定上限,只能是数字类型 private T var; // 此类型由外部决定 public T getVar() { return this.var; } public void setVar(T var) { this.var = var; } @Override public String toString() { // 覆写Object类中的toString()方法 return this.var.toString(); } }; /** * 通过泛型方法返回泛型类的实例 * * @author xieke * */ public class GenericsDemo2 { public static void main(String args[]) { Info<Integer> i = fun(22); System.out.println(i.getVar()); } public static <T extends Number> Info<T> fun(T param) { Info<T> temp = new Info<T>(); // 根据传入的数据类型实例化Info temp.setVar(param); // 将传递的内容设置到Info对象的var属性之中 return temp; // 返回实例化对象 } };
3、第三种形式:使用泛型统一传入参数的类型。
package com.xieke.generics.method.demo3; class Info<T> { private T var; // 此类型由外部决定 public T getVar() { return this.var; } public void setVar(T var) { this.var = var; } @Override public String toString() { // 覆写Object类中的toString()方法 return this.var.toString(); } }; /** * 使用泛型统一传入参数的类型 * * @author xieke * */ public class GenericsDemo3 { public static void main(String args[]) { Info<String> i1 = new Info<String>(); Info<String> i2 = new Info<String>(); i1.setVar("hujun"); // 设置内容 i2.setVar("xieke"); // 设置内容 add(i1, i2); } public static <T> void add(Info<T> i1, Info<T> i2) { System.out.println(i1.getVar() + " " + i2.getVar()); } };
三、泛型数组
package com.xieke.generics.array.demo; public class GenericsDemo { public static void main(String args[]) { Integer i[] = fun1(1, 2, 3, 4, 5, 6); // 返回泛型数组 fun2(i); } public static <T> T[] fun1(T... arg) { // 接收可变参数 return arg; // 返回泛型数组 } public static <T> void fun2(T param[]) { // 输出 System.out.print("接收泛型数组:"); for (T t : param) { System.out.print(t + "、"); } } };
四、泛型嵌套
package com.xieke.generics.nest.demo; class Info<T, V> { // 接收两个泛型类型 private T var; private V value; public Info(T var, V value) { this.setVar(var); this.setValue(value); } public void setVar(T var) { this.var = var; } public void setValue(V value) { this.value = value; } public T getVar() { return this.var; } public V getValue() { return this.value; } }; class Demo<S> { private S info; public Demo(S info) { this.setInfo(info); } public void setInfo(S info) { this.info = info; } public S getInfo() { return this.info; } }; public class GenericsDemo { public static void main(String args[]) { Demo<Info<String, Integer>> d = null; // 将Info作为Demo的泛型类型 Info<String, Integer> i = null; // Info指定两个泛型类型 i = new Info<String, Integer>("xieke", 22); // 实例化Info对象 d = new Demo<Info<String, Integer>>(i); // 在Demo类中设置Info类的对象 System.out.println("内容一:" + d.getInfo().getVar()); System.out.println("内容二:" + d.getInfo().getValue()); } };
转载请注明出处: http://xieke90.iteye.com/blog/2310772
相关推荐
java泛型详解.pdf
Java泛型详解,Java泛型详解,Java泛型详解,Java泛型详解
思维导图之Java泛型详解
Java 泛型是一种强大的语言特性,它允许在类、接口和方法中使用类型参数,以实现类型的安全性和代码的重用性。泛型是 Java 从 JDK 5.0 版本开始引入的重要特性,目的是增强类型系统,提高程序的类型安全性,减少运行...
Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...
Java 泛型详解 Java 泛型是 Java SE 5.0 中引入的一项特征,它允许程序员在编译时检查类型安全,从而减少了 runtime 错误的可能性。泛型的主要优点是可以Reusable Code,让程序员编写更加灵活和可维护的代码。 ...
### Java泛型的使用详细讲解 #### 一、引言 在Java开发中,泛型是一种重要的语言特性,它能够帮助开发者在不增加代码量的情况下处理多种数据类型,同时还能保持代码的清晰度和可读性。本文将详细介绍Java泛型的...
还有类型擦除,这是Java泛型的一个特性,意味着在运行时,所有的泛型信息都会被移除,因此泛型并不影响程序的性能,但它提供了编译时的类型检查。 在集合框架中,泛型发挥了重要作用。Java的List、Set、Map等集合类...
### Java 泛型详解与应用 #### 一、什么是Java泛型? Java泛型(Generics)是一种在编译时确保类型安全的机制,它允许程序员编写类型安全的通用类或方法,而无需进行显式的类型转换。在Java 1.5引入泛型之前,集合...
【Java泛型详解】 Java泛型是Java SE 5.0引入的新特性,它允许在类、接口和方法声明中使用类型参数,从而增强了代码的类型安全性和重用性。泛型的主要目标是提高代码的复用性,减少类型转换,并在编译时捕获类型...
本文将深入探讨Java泛型的概念、优点、使用方式及其在实际开发中的应用。 **一、泛型的基本概念** 泛型是Java语言中的一种参数化类型,它允许在定义类、接口和方法时使用类型参数,从而实现数据类型的模板化。通过...
java泛型 开发心得 实例代码 详解文档 全是从网上搜索得来的,感觉比较好的
java 泛型详解
### JAVA泛型详解 #### 泛型:打破具体类型的枷锁 在传统的Java编程中,类和方法的设计往往受限于具体的类型,无论是基本数据类型还是自定义的类。这种限制在面对多变的需求时显得尤为棘手,因为它迫使开发者重复...
让我们深入探讨一下Java泛型的各个方面。 首先,泛型(Generic type)是一种在定义类、接口或方法时,使用类型参数的方式。类型参数就像是方法的形参,但用于类型而非值。例如,当我们创建一个泛型列表`List<T>`,`...
### Java泛型详解 #### 一、Java泛型概述 Java泛型(Generics)是Java SE 5.0引入的一项重要新特性,它允许开发者在定义类、接口或方法时使用类型参数(Type Parameters)。类型参数在使用时可以用具体的类型来...
### Java中的泛型机制详解 #### 泛型概念与背景 在Java中,泛型是一种在编译时检查类型安全性的方法,它提供了一种在类接口或方法中使用类型参数的能力,允许开发者指定实际使用的具体类型。这种机制极大地提高了...