zoukankan      html  css  js  c++  java
  • 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 };

    通配符泛型

     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 };

    受限泛型

     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 };

     泛型无法向上转型

     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 };

     泛型接口

     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 };

    泛型方法

     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 };

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

     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 };

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

     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 };

    泛型数组

     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 };

     泛型的嵌套设置

     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 };
    努力奋斗的小墨鱼 ---- http://www.cnblogs.com/WayneZeng/
  • 相关阅读:
    吕滔博客 --------MYSQL 备份与参数详解
    solaris知识库
    F5 负载均衡
    日志管理 rsyslog服务浅析
    你所不知到的C++ 系列
    php内核探索
    shell 编程中使用到得if语句内判断参数
    linux查看CPU性能及工作状态的指令
    MYSQL 5.7 主从复制 -----GTID说明与限制 原创
    C#:Json数据反序列化为Dictionary并根据关键字获取指定的值
  • 原文地址:https://www.cnblogs.com/WayneZeng/p/2697248.html
Copyright © 2011-2022 走看看