`

泛型详解

    博客分类:
  • java
阅读更多

来源与 http://lichaozhangobj.iteye.com/blog/476911


普通泛型
Java代码  
class Point<T>{       // 此处可以随便写标识符号,T是type的简称  
    private T var ; // var的类型由T指定,即:由外部指定  
    public T getVar(){  // 返回值的类型由外部决定  
        return var ;  
    }  
    public void setVar(T var){  // 设置的类型也由外部决定  
        this.var = var ;  
    }  
};  
public class GenericsDemo06{  
    public static void main(String args[]){  
        Point<String> p = new Point<String>() ; // 里面的var类型为String类型  
        p.setVar("it") ;        // 设置字符串  
        System.out.println(p.getVar().length()) ;   // 取得字符串的长度  
    }  
};  
----------------------------------------------------------  
class Notepad<K,V>{       // 此处指定了两个泛型类型  
    private K key ;     // 此变量的类型由外部决定  
    private V value ;   // 此变量的类型由外部决定  
    public K getKey(){  
        return this.key ;  
    }  
    public V getValue(){  
        return this.value ;  
    }  
    public void setKey(K key){  
        this.key = key ;  
    }  
    public void setValue(V value){  
        this.value = value ;  
    }  
};  
public class GenericsDemo09{  
    public static void main(String args[]){  
        Notepad<String,Integer> t = null ;        // 定义两个泛型类型的对象  
        t = new Notepad<String,Integer>() ;       // 里面的key为String,value为Integer  
        t.setKey("汤姆") ;        // 设置第一个内容  
        t.setValue(20) ;            // 设置第二个内容  
        System.out.print("姓名;" + t.getKey()) ;      // 取得信息  
        System.out.print(",年龄;" + t.getValue()) ;       // 取得信息  
  
    }  
};  


 通配符
Java代码  
class Info<T>{  
    private T var ;     // 定义泛型变量  
    public void setVar(T var){  
        this.var = var ;  
    }  
    public T getVar(){  
        return this.var ;  
    }  
    public String toString(){   // 直接打印  
        return this.var.toString() ;  
    }  
};  
public class GenericsDemo14{  
    public static void main(String args[]){  
        Info<String> i = new Info<String>() ;       // 使用String为泛型类型  
        i.setVar("it") ;                            // 设置内容  
        fun(i) ;  
    }  
    public static void fun(Info<?> temp){     // 可以接收任意的泛型对象  
        System.out.println("内容:" + temp) ;  
    }  
};  


 受限泛型
Java代码  
class Info<T>{  
    private T var ;     // 定义泛型变量  
    public void setVar(T var){  
        this.var = var ;  
    }  
    public T getVar(){  
        return this.var ;  
    }  
    public String toString(){   // 直接打印  
        return this.var.toString() ;  
    }  
};  
public class GenericsDemo17{  
    public static void main(String args[]){  
        Info<Integer> i1 = new Info<Integer>() ;        // 声明Integer的泛型对象  
        Info<Float> i2 = new Info<Float>() ;            // 声明Float的泛型对象  
        i1.setVar(30) ;                                 // 设置整数,自动装箱  
        i2.setVar(30.1f) ;                              // 设置小数,自动装箱  
        fun(i1) ;  
        fun(i2) ;  
    }  
    public static void fun(Info<? extends Number> temp){  // 只能接收Number及其Number的子类  
        System.out.print(temp + "、") ;  
    }  
};  
----------------------------------------------------------  
class Info<T>{  
    private T var ;     // 定义泛型变量  
    public void setVar(T var){  
        this.var = var ;  
    }  
    public T getVar(){  
        return this.var ;  
    }  
    public String toString(){   // 直接打印  
        return this.var.toString() ;  
    }  
};  
public class GenericsDemo21{  
    public static void main(String args[]){  
        Info<String> i1 = new Info<String>() ;      // 声明String的泛型对象  
        Info<Object> i2 = new Info<Object>() ;      // 声明Object的泛型对象  
        i1.setVar("hello") ;  
        i2.setVar(new Object()) ;  
        fun(i1) ;  
        fun(i2) ;  
    }  
    public static void fun(Info<? super String> temp){    // 只能接收String或Object类型的泛型  
        System.out.print(temp + "、") ;  
    }  
};  



 泛型无法向上转型
Java代码  
class Info<T>{  
    private T var ;     // 定义泛型变量  
    public void setVar(T var){  
        this.var = var ;  
    }  
    public T getVar(){  
        return this.var ;  
    }  
    public String toString(){   // 直接打印  
        return this.var.toString() ;  
    }  
};  
public class GenericsDemo23{  
    public static void main(String args[]){  
        Info<String> i1 = new Info<String>() ;      // 泛型类型为String  
        Info<Object> i2 = null ;  
        i2 = i1 ;                               //这句会出错 incompatible types  
    }  
};  



 泛型接口
Java代码  
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 ;  
    }  
    public T getVar(){  
        return this.var ;  
    }  
};  
public class GenericsDemo24{  
    public static void main(String arsg[]){  
        Info<String> i = null;        // 声明接口对象  
        i = new InfoImpl<String>("汤姆") ;  // 通过子类实例化对象  
        System.out.println("内容:" + i.getVar()) ;  
    }  
};  
----------------------------------------------------------  
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 ;  
    }  
    public String getVar(){  
        return this.var ;  
    }  
};  
public class GenericsDemo25{  
    public static void main(String arsg[]){  
        Info i = null;      // 声明接口对象  
        i = new InfoImpl("汤姆") ;    // 通过子类实例化对象  
        System.out.println("内容:" + i.getVar()) ;  
    }  
};  



 泛型方法
Java代码  
class Demo{  
    public <T> T fun(T t){            // 可以接收任意类型的数据  
        return t ;                  // 直接把参数返回  
    }  
};  
public class GenericsDemo26{  
    public static void main(String args[]){  
        Demo d = new Demo() ;   // 实例化Demo对象  
        String str = d.fun("汤姆") ; //   传递字符串  
        int i = d.fun(30) ;     // 传递数字,自动装箱  
        System.out.println(str) ;   // 输出内容  
        System.out.println(i) ;     // 输出内容  
    }  
};  
 通过泛型方法返回泛型类型实例
Java代码  
class Info<T extends Number>{ // 指定上限,只能是数字类型  
    private T var ;     // 此类型由外部决定  
    public T getVar(){  
        return this.var ;     
    }  
    public void setVar(T var){  
        this.var = var ;  
    }  
    public String toString(){       // 覆写Object类中的toString()方法  
        return this.var.toString() ;      
    }  
};  
public class GenericsDemo27{  
    public static void main(String args[]){  
        Info<Integer> i = fun(30) ;  
        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 ;   // 返回实例化对象  
    }  
};  



 使用泛型统一传入的参数类型
Java代码  
class Info<T>{    // 指定上限,只能是数字类型  
    private T var ;     // 此类型由外部决定  
    public T getVar(){  
        return this.var ;     
    }  
    public void setVar(T var){  
        this.var = var ;  
    }  
    public String toString(){       // 覆写Object类中的toString()方法  
        return this.var.toString() ;      
    }  
};  
public class GenericsDemo28{  
    public static void main(String args[]){  
        Info<String> i1 = new Info<String>() ;  
        Info<String> i2 = new Info<String>() ;  
        i1.setVar("HELLO") ;        // 设置内容  
        i2.setVar("汤姆") ;       // 设置内容  
        add(i1,i2) ;  
    }  
    public static <T> void add(Info<T> i1,Info<T> i2){  
        System.out.println(i1.getVar() + " " + i2.getVar()) ;  
    }  
};  



 泛型数组
Java代码  
public class GenericsDemo30{  
    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 + "、") ;  
        }  
    }  
};  



 泛型的嵌套设置
Java代码  
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 GenericsDemo31{  
    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>("汤姆",30) ;    // 实例化Info对象  
        d = new Demo<Info<String,Integer>>(i) ; // 在Demo类中设置Info类的对象  
        System.out.println("内容一:" + d.getInfo().getVar()) ;  
        System.out.println("内容二:" + d.getInfo().getValue()) ;  
    }  
};  

分享到:
评论

相关推荐

    Java 泛型详解

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

    java泛型详解.pdf

    java泛型详解.pdf

    C# 之泛型详解

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

    思维导图之Java泛型详解

    思维导图之Java泛型详解

    博客《夯实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