`

泛型详解

 
阅读更多

普通泛型

Java代码 复制代码
  1. class Point<T>{       // 此处可以随便写标识符号,T是type的简称   
  2.     private T var ; // var的类型由T指定,即:由外部指定   
  3.     public T getVar(){  // 返回值的类型由外部决定   
  4.         return var ;   
  5.     }   
  6.     public void setVar(T var){  // 设置的类型也由外部决定   
  7.         this.var = var ;   
  8.     }   
  9. };   
  10. public class GenericsDemo06{   
  11.     public static void main(String args[]){   
  12.         Point<String> p = new Point<String>() ; // 里面的var类型为String类型   
  13.         p.setVar("it") ;        // 设置字符串   
  14.         System.out.println(p.getVar().length()) ;   // 取得字符串的长度   
  15.     }   
  16. };   
  17. ----------------------------------------------------------   
  18. class Notepad<K,V>{       // 此处指定了两个泛型类型   
  19.     private K key ;     // 此变量的类型由外部决定   
  20.     private V value ;   // 此变量的类型由外部决定   
  21.     public K getKey(){   
  22.         return this.key ;   
  23.     }   
  24.     public V getValue(){   
  25.         return this.value ;   
  26.     }   
  27.     public void setKey(K key){   
  28.         this.key = key ;   
  29.     }   
  30.     public void setValue(V value){   
  31.         this.value = value ;   
  32.     }   
  33. };   
  34. public class GenericsDemo09{   
  35.     public static void main(String args[]){   
  36.         Notepad<String,Integer> t = null ;        // 定义两个泛型类型的对象   
  37.         t = new Notepad<String,Integer>() ;       // 里面的key为String,value为Integer   
  38.         t.setKey("汤姆") ;        // 设置第一个内容   
  39.         t.setValue(20) ;            // 设置第二个内容   
  40.         System.out.print("姓名;" + t.getKey()) ;      // 取得信息   
  41.         System.out.print(",年龄;" + t.getValue()) ;       // 取得信息   
  42.   
  43.     }   
  44. };  

 通配符

Java代码 复制代码
  1. class Info<T>{   
  2.     private T var ;     // 定义泛型变量   
  3.     public void setVar(T var){   
  4.         this.var = var ;   
  5.     }   
  6.     public T getVar(){   
  7.         return this.var ;   
  8.     }   
  9.     public String toString(){   // 直接打印   
  10.         return this.var.toString() ;   
  11.     }   
  12. };   
  13. public class GenericsDemo14{   
  14.     public static void main(String args[]){   
  15.         Info<String> i = new Info<String>() ;       // 使用String为泛型类型   
  16.         i.setVar("it") ;                            // 设置内容   
  17.         fun(i) ;   
  18.     }   
  19.     public static void fun(Info<?> temp){     // 可以接收任意的泛型对象   
  20.         System.out.println("内容:" + temp) ;   
  21.     }   
  22. };  

 受限泛型

Java代码 复制代码
  1. class Info<T>{   
  2.     private T var ;     // 定义泛型变量   
  3.     public void setVar(T var){   
  4.         this.var = var ;   
  5.     }   
  6.     public T getVar(){   
  7.         return this.var ;   
  8.     }   
  9.     public String toString(){   // 直接打印   
  10.         return this.var.toString() ;   
  11.     }   
  12. };   
  13. public class GenericsDemo17{   
  14.     public static void main(String args[]){   
  15.         Info<Integer> i1 = new Info<Integer>() ;        // 声明Integer的泛型对象   
  16.         Info<Float> i2 = new Info<Float>() ;            // 声明Float的泛型对象   
  17.         i1.setVar(30) ;                                 // 设置整数,自动装箱   
  18.         i2.setVar(30.1f) ;                              // 设置小数,自动装箱   
  19.         fun(i1) ;   
  20.         fun(i2) ;   
  21.     }   
  22.     public static void fun(Info<? extends Number> temp){  // 只能接收Number及其Number的子类   
  23.         System.out.print(temp + "、") ;   
  24.     }   
  25. };   
  26. ----------------------------------------------------------   
  27. class Info<T>{   
  28.     private T var ;     // 定义泛型变量   
  29.     public void setVar(T var){   
  30.         this.var = var ;   
  31.     }   
  32.     public T getVar(){   
  33.         return this.var ;   
  34.     }   
  35.     public String toString(){   // 直接打印   
  36.         return this.var.toString() ;   
  37.     }   
  38. };   
  39. public class GenericsDemo21{   
  40.     public static void main(String args[]){   
  41.         Info<String> i1 = new Info<String>() ;      // 声明String的泛型对象   
  42.         Info<Object> i2 = new Info<Object>() ;      // 声明Object的泛型对象   
  43.         i1.setVar("hello") ;   
  44.         i2.setVar(new Object()) ;   
  45.         fun(i1) ;   
  46.         fun(i2) ;   
  47.     }   
  48.     public static void fun(Info<? super String> temp){    // 只能接收String或Object类型的泛型   
  49.         System.out.print(temp + "、") ;   
  50.     }   
  51. };  

 泛型无法向上转型

Java代码 复制代码
  1. class Info<T>{   
  2.     private T var ;     // 定义泛型变量   
  3.     public void setVar(T var){   
  4.         this.var = var ;   
  5.     }   
  6.     public T getVar(){   
  7.         return this.var ;   
  8.     }   
  9.     public String toString(){   // 直接打印   
  10.         return this.var.toString() ;   
  11.     }   
  12. };   
  13. public class GenericsDemo23{   
  14.     public static void main(String args[]){   
  15.         Info<String> i1 = new Info<String>() ;      // 泛型类型为String   
  16.         Info<Object> i2 = null ;   
  17.         i2 = i1 ;                               //这句会出错 incompatible types   
  18.     }   
  19. };  

 泛型接口

Java代码 复制代码
  1. interface Info<T>{        // 在接口上定义泛型   
  2.     public T getVar() ; // 定义抽象方法,抽象方法的返回值就是泛型类型   
  3. }   
  4. class InfoImpl<T> implements Info<T>{   // 定义泛型接口的子类   
  5.     private T var ;             // 定义属性   
  6.     public InfoImpl(T var){     // 通过构造方法设置属性内容   
  7.         this.setVar(var) ;     
  8.     }   
  9.     public void setVar(T var){   
  10.         this.var = var ;   
  11.     }   
  12.     public T getVar(){   
  13.         return this.var ;   
  14.     }   
  15. };   
  16. public class GenericsDemo24{   
  17.     public static void main(String arsg[]){   
  18.         Info<String> i = null;        // 声明接口对象   
  19.         i = new InfoImpl<String>("汤姆") ;  // 通过子类实例化对象   
  20.         System.out.println("内容:" + i.getVar()) ;   
  21.     }   
  22. };   
  23. ----------------------------------------------------------   
  24. interface Info<T>{        // 在接口上定义泛型   
  25.     public T getVar() ; // 定义抽象方法,抽象方法的返回值就是泛型类型   
  26. }   
  27. class InfoImpl implements Info<String>{   // 定义泛型接口的子类   
  28.     private String var ;                // 定义属性   
  29.     public InfoImpl(String var){        // 通过构造方法设置属性内容   
  30.         this.setVar(var) ;     
  31.     }   
  32.     public void setVar(String var){   
  33.         this.var = var ;   
  34.     }   
  35.     public String getVar(){   
  36.         return this.var ;   
  37.     }   
  38. };   
  39. public class GenericsDemo25{   
  40.     public static void main(String arsg[]){   
  41.         Info i = null;      // 声明接口对象   
  42.         i = new InfoImpl("汤姆") ;    // 通过子类实例化对象   
  43.         System.out.println("内容:" + i.getVar()) ;   
  44.     }   
  45. };  

 泛型方法

Java代码 复制代码
  1. class Demo{   
  2.     public <T> T fun(T t){            // 可以接收任意类型的数据   
  3.         return t ;                  // 直接把参数返回   
  4.     }   
  5. };   
  6. public class GenericsDemo26{   
  7.     public static void main(String args[]){   
  8.         Demo d = new Demo() ;   // 实例化Demo对象   
  9.         String str = d.fun("汤姆") ; //   传递字符串   
  10.         int i = d.fun(30) ;     // 传递数字,自动装箱   
  11.         System.out.println(str) ;   // 输出内容   
  12.         System.out.println(i) ;     // 输出内容   
  13.     }   
  14. };  

 通过泛型方法返回泛型类型实例

Java代码 复制代码
  1. class Info<T extends Number>{ // 指定上限,只能是数字类型   
  2.     private T var ;     // 此类型由外部决定   
  3.     public T getVar(){   
  4.         return this.var ;      
  5.     }   
  6.     public void setVar(T var){   
  7.         this.var = var ;   
  8.     }   
  9.     public String toString(){       // 覆写Object类中的toString()方法   
  10.         return this.var.toString() ;       
  11.     }   
  12. };   
  13. public class GenericsDemo27{   
  14.     public static void main(String args[]){   
  15.         Info<Integer> i = fun(30) ;   
  16.         System.out.println(i.getVar()) ;   
  17.     }   
  18.     public static <T extends Number> Info<T> fun(T param){//方法中传入或返回的泛型类型由调用方法时所设置的参数类型决定   
  19.         Info<T> temp = new Info<T>() ;      // 根据传入的数据类型实例化Info   
  20.         temp.setVar(param) ;        // 将传递的内容设置到Info对象的var属性之中   
  21.         return temp ;   // 返回实例化对象   
  22.     }   
  23. };  

 使用泛型统一传入的参数类型

Java代码 复制代码
  1. class Info<T>{    // 指定上限,只能是数字类型   
  2.     private T var ;     // 此类型由外部决定   
  3.     public T getVar(){   
  4.         return this.var ;      
  5.     }   
  6.     public void setVar(T var){   
  7.         this.var = var ;   
  8.     }   
  9.     public String toString(){       // 覆写Object类中的toString()方法   
  10.         return this.var.toString() ;       
  11.     }   
  12. };   
  13. public class GenericsDemo28{   
  14.     public static void main(String args[]){   
  15.         Info<String> i1 = new Info<String>() ;   
  16.         Info<String> i2 = new Info<String>() ;   
  17.         i1.setVar("HELLO") ;        // 设置内容   
  18.         i2.setVar("汤姆") ;       // 设置内容   
  19.         add(i1,i2) ;   
  20.     }   
  21.     public static <T> void add(Info<T> i1,Info<T> i2){   
  22.         System.out.println(i1.getVar() + " " + i2.getVar()) ;   
  23.     }   
  24. };  

 泛型数组

Java代码 复制代码
  1. public class GenericsDemo30{   
  2.     public static void main(String args[]){   
  3.         Integer i[] = fun1(1,2,3,4,5,6) ;   // 返回泛型数组   
  4.         fun2(i) ;   
  5.     }   
  6.     public static <T> T[] fun1(T...arg){  // 接收可变参数   
  7.         return arg ;            // 返回泛型数组   
  8.     }   
  9.     public static <T> void fun2(T param[]){   // 输出   
  10.         System.out.print("接收泛型数组:") ;   
  11.         for(T t:param){   
  12.             System.out.print(t + "、") ;   
  13.         }   
  14.     }   
  15. };  

 泛型的嵌套设置

Java代码 复制代码
  1. class Info<T,V>{      // 接收两个泛型类型  
  2.     private T var ;  
  3.     private V value ;  
  4.     public Info(T var,V value){  
  5.         this.setVar(var) ;  
  6.         this.setValue(value) ;  
  7.     }  
  8.     public void setVar(T var){  
  9.         this.var = var ;  
  10.     }  
  11.     public void setValue(V value){  
  12.         this.value = value ;  
  13.     }  
  14.     public T getVar(){  
  15.         return this.var ;  
  16.     }  
  17.     public V getValue(){  
  18.         return this.value ;  
  19.     }  
  20. };  
  21. class Demo<S>{  
  22.     private S info ;  
  23.     public Demo(S info){  
  24.         this.setInfo(info) ;  
  25.     }  
  26.     public void setInfo(S info){  
  27.         this.info = info ;  
  28.     }  
  29.     public S getInfo(){  
  30.         return this.info ;  
  31.     }  
  32. };  
  33. public class GenericsDemo31{  
  34.     public static void main(String args[]){  
  35.         Demo<Info<String,Integer>> d = null ;       // 将Info作为Demo的泛型类型  
  36.         Info<String,Integer> i = null ;   // Info指定两个泛型类型  
  37.         i = new Info<String,Integer>("汤姆",30) ;    // 实例化Info对象  
  38.         d = new Demo<Info<String,Integer>>(i) ; // 在Demo类中设置Info类的对象  
  39.         System.out.println("内容一:" + d.getInfo().getVar()) ;  
  40.         System.out.println("内容二:" + d.getInfo().getValue()) ;  
  41.     }  
  42. }; 
分享到:
评论

相关推荐

    Java 泛型详解

    Java泛型详解,Java泛型详解,Java泛型详解,Java泛型详解

    java泛型详解.pdf

    java泛型详解.pdf

    C# 之泛型详解

    泛型是C#编程语言中的一个重要特性,它允许开发者创建可重用的代码模板,这些模板可以在多种数据类型上工作,而无需重复编写相同逻辑。泛型的主要目标是提高代码的效率、安全性和复用性。 在传统的C#编程中,如果...

    思维导图之Java泛型详解

    思维导图之Java泛型详解

    适合初学者的C# 泛型详解

    ### C# 泛型详解:面向初学者的深入探索 #### 一、引言 随着计算机科学的发展,软件工程中的代码复用性变得越来越重要。C# 2.0 引入了泛型这一特性,极大地提升了代码的质量与效率。泛型是一种允许程序员创建类型...

    博客《夯实JAVA基本之一——泛型详解(1)》对应源码

    在《夯实JAVA基本之一——泛型详解(1)》的博客中,作者深入浅出地探讨了泛型的基本概念和用法,本文将基于这个博客源码,详细解析泛型的相关知识点。 首先,泛型的主要目标是提高代码的类型安全性。在未引入泛型...

    JAVA泛型详解DD

    【Java泛型详解】 Java泛型是Java SE 5.0引入的新特性,它允许在类、接口和方法声明中使用类型参数,从而增强了代码的类型安全性和重用性。泛型的主要目标是提高代码的复用性,减少类型转换,并在编译时捕获类型...

    博客《夯实JAVA基本之一——泛型详解(2)》对应源码

    在《夯实JAVA基本之一——泛型详解(2)》这篇博客中,作者深入探讨了泛型的高级用法和概念,这些内容对于理解和掌握Java泛型至关重要。 首先,泛型的基本语法是以尖括号 `&lt;T&gt;` 表示,其中 `T` 是一个类型参数,代表...

    java泛型详解java泛型详解.doc

    Java 泛型是一种强大的语言特性,它允许在类、接口和方法中使用类型参数,以实现类型的安全性和代码的重用性。泛型是 Java 从 JDK 5.0 版本开始引入的重要特性,目的是增强类型系统,提高程序的类型安全性,减少运行...

    C#泛型详解

    ### C#泛型详解 #### 一、引言与背景 在软件开发过程中,经常会遇到相同逻辑处理不同数据类型的情况。例如,一个排序算法可以应用于整数数组、字符串数组甚至是自定义对象数组。传统做法是为每种数据类型编写一个...

    java 1.5泛型详解

    Java泛型是自Java 1.5版本引入的一项重要特性,极大地提高了代码的类型安全性和重用性。本文将深入探讨Java泛型的概念、优点、使用方式及其在实际开发中的应用。 **一、泛型的基本概念** 泛型是Java语言中的一种...

    c#泛型详解,泛型方法,泛型类

    泛型是C#编程中的一项重要特性,它允许开发者创建可重用的代码,同时确保类型安全。在C#中,泛型通过参数化类型来实现,这意味着可以在一个泛型类或方法中使用一个或多个类型参数,这些参数将在实际使用时被具体的...

    java泛型详解

    ### Java泛型详解 #### 泛型的概念与背景 Java泛型是一种强大的类型系统扩展机制,它使得开发者能够创建参数化的类型,也就是说,能够在类、接口或者方法的上下文中使用类型参数来代替具体的类型。这种设计的核心...

    C#之泛型详解.docx

    泛型是C#编程语言中的一个重要特性,它允许开发者创建可重用的代码模板,这些模板可以在多种数据类型上工作,从而提高了代码的灵活性、效率和安全性。泛型的引入解决了在处理不同类型数据时需要重复编写类似代码的...

    C#泛型详解由入门到精通.docx

    泛型在C#编程语言中是一个强大的特性,它允许开发者创建可以处理多种数据类型的类、接口、方法和委托。这极大地提高了代码的复用性和效率,同时降低了类型转换的开销。以下是对C#泛型的详细介绍: 1. **泛型简介** ...

    JAVA泛型详解[参考].pdf

    泛型是Java编程中的一项重要特性,它允许我们在定义类、接口、方法时使用类型参数,从而实现更灵活、安全的代码设计。泛型的主要目的是提高类型安全性,减少强制类型转换,以及提供编译时的类型约束。 在传统的Java...

    JAVA泛型详解

    ### JAVA泛型详解 #### 泛型:打破具体类型的枷锁 在传统的Java编程中,类和方法的设计往往受限于具体的类型,无论是基本数据类型还是自定义的类。这种限制在面对多变的需求时显得尤为棘手,因为它迫使开发者重复...

Global site tag (gtag.js) - Google Analytics