zoukankan      html  css  js  c++  java
  • 第08章 泛型

      1 /*****************
      2 ***第08章 泛型
      3 *******知识点:
      4 **************1.泛型定义
      5 **************2.泛型使用
      6 ******************2.1 普通泛型
      7 ******************2.2 类型通配符
      8 ******************2.3 受限泛型
      9 ******************2.4 泛型接口、类、方法
     10 ******************2.5 泛型数组
     11 ******************2.6 嵌套设置
     12 */
     13 import java.util.*;
     14 
     15 class Point<T>{       // 此处可以随便写标识符号,T是type的简称  
     16     private T var ; // var的类型由T指定,即:由外部指定  
     17     public T getVar(){  // 返回值的类型由外部决定  
     18         return var ;  
     19     }  
     20     public void setVar(T var){  // 设置的类型也由外部决定  
     21         this.var = var ;  
     22     }  
     23     public Point(T t){
     24         this.var = t;
     25     }
     26     public Point(){
     27         
     28     }
     29 }
     30 
     31 class PointKeyValue<K,V>{  // 此处指定了两个泛型类型  
     32     private K key;    // 此变量的类型由外部决定  
     33     private V value;  // 此变量的类型由外部决定
     34     public void setKey(K key){
     35         this.key = key;
     36     }
     37     public void setValue(V value){
     38         this.value = value;
     39     }
     40     public K getKey(){
     41         return key;
     42     }
     43     public V getValue(){
     44         return value;
     45     }
     46     
     47     public String toString(){
     48         return "{" + key + "," + value + "}";
     49     }
     50     public PointKeyValue(K k ,V v){
     51         this.key = k;
     52         this.value = v;
     53     }
     54     public PointKeyValue(){
     55         
     56     }
     57     
     58 }
     59 
     60 class PointInner<T,K,V>{
     61     private PointKeyValue p_PointKeyValue; // 接收两个泛型类型成员变量
     62     private Point p_Point;
     63     public PointInner(T t,K k,V v){
     64         this.p_Point = new Point(t);
     65         this.p_PointKeyValue = new PointKeyValue(k,v);
     66     }
     67     
     68     public String toString(){
     69         return "{" + p_Point.getVar() + ":" + p_PointKeyValue.getKey() + "," + p_PointKeyValue.getValue() + "}";
     70     }
     71 }
     72 
     73 public class test8{
     74     public static void main(String[] args){
     75         showDemo("泛型定义");
     76         testGenericsDefined();//演示泛型定义
     77         
     78         showDemo("泛型使用");
     79         testGenericsUse();//演示泛型使用
     80     }    
     81     
     82     /*
     83     *1.泛型定义
     84     */
     85     public static void testGenericsDefined(){
     86         /*List l_Gen = new ArrayList();
     87         l_Gen.add(1);
     88         l_Gen.add(2);
     89         l_Gen.add("aaaaa");//注意跟之前两个元素类型发生了变化,但不报错
     90         System.out.println("集合中元素有:"  + l_Gen);
     91         
     92         List<Integer> l_Gen1 = new ArrayList<Integer>();
     93         l_Gen1.add(1);
     94         l_Gen1.add(2);
     95         l_Gen1.add("aaaaa");//此行报错
     96         System.out.println("集合中元素有:"  + l_Gen1);*/
     97         
     98         //泛型:Java的参数化类型,即允许我们在创建集合时指定集合中元素的类型,且该集合只能存储指定类型的元素
     99         //使用范围:定义类、接口、方法是使用类型形参
    100         //需注意:静态初始化块中是不允许的
    101         
    102     }
    103     
    104     /*
    105     *2.泛型使用
    106     */
    107     public static void testGenericsUse(){
    108         /**2.1 普通泛型**/
    109         System.out.println("演示2.1 普通泛型===========");
    110         Point<Integer> p_Generics = new Point<Integer>(); //里面的var类型为Integer
    111         p_Generics.setVar(new Integer(1));//设置var
    112         System.out.println("返回int值:" + (p_Generics.getVar().intValue()));//返回var
    113         
    114         PointKeyValue<Integer,String> p_KeyValue = new PointKeyValue<Integer,String>();
    115         p_KeyValue.setKey(new Integer(10));
    116         p_KeyValue.setValue("Ciade");
    117         System.out.println("返回key:" + p_KeyValue.getKey());
    118         System.out.println("返回value:" + p_KeyValue.getValue());
    119         System.out.println("返回p_KeyValue:" + p_KeyValue.toString());
    120         
    121         /**2.2 类型通配符**/
    122         System.out.println("演示2.2 类型通配符===========");
    123         PointKeyValue<Integer,Double> p_PointKeyValue2 = new PointKeyValue<Integer,Double>();
    124         PointKeyValue<String,String> p_PointKeyValue3 = new PointKeyValue<String,String>();
    125         
    126         p_PointKeyValue2.setKey(new Integer(2));
    127         p_PointKeyValue2.setValue(new Double(2.2));
    128         
    129         p_PointKeyValue3.setKey("3");
    130         p_PointKeyValue3.setValue("33333333");//注意区分p_PointKeyValue2和p_PointKeyValue3
    131         
    132         demoWildcardFun(p_PointKeyValue2);//调用通配符泛型演示方法
    133         demoWildcardFun(p_PointKeyValue3);//调用通配符泛型演示方法
    134         
    135         /**2.3 受限泛型**/
    136         System.out.println("演示2.3 受限泛型===========");
    137         PointKeyValue<Integer,String> p_PointKeyValue4 = new PointKeyValue<Integer,String>();
    138         
    139         p_PointKeyValue4.setKey(new Integer(4));
    140         p_PointKeyValue4.setValue("4444444");
    141         
    142         //demoLimitedFun(p_PointKeyValue2);//这行报错  类型受限
    143         //demoLimitedFun(p_PointKeyValue3);//这行报错  类型受限
    144         demoLimitedFun(p_PointKeyValue4);
    145         
    146         /**2.4 泛型接口、类、方法**/
    147         //接口、类 、方法 参照上面的Point类和PointKeyValue类的定义使用
    148         //温馨提示  当重载方法时,若重载的参数个数相同,参数类型和返回值不同时 可以使用泛型方法
    149         
    150         /**2.5 泛型数组**/
    151         //Java 不支持泛型数组。也就是说
    152         //List<String>[] ls = new ArrayList<String>[10];  //编译报错
    153         //而你可以这样子
    154         //List<String>[] ls = new ArrayList[10];
    155         //不过不建议使用
    156         
    157         /**2.6 嵌套设置**/
    158         System.out.println("演示2.6 嵌套设置===========");
    159         PointInner<Integer,Integer,String> p_PointInner = new PointInner<Integer,Integer,String>
    160                                                         (new Integer(7),new Integer(7),"777777777");
    161         System.out.println("PointInner对象:" + p_PointInner);
    162 
    163     }
    164     
    165     /*
    166     *  通配符泛型演示方法
    167     */
    168     public static void demoWildcardFun(PointKeyValue<?,?> temp){  // 可以接收任意的泛型对象 其中?为通配符
    169         System.out.print("返回key:" + temp.getKey());
    170         System.out.print("_返回value:" + temp.getValue());
    171         System.out.println("_返回PointKeyValue对象:" + temp.toString());
    172         
    173     }
    174     
    175     /*
    176     * 受限泛型演示方法
    177     */
    178     //第一个参数只能接收Number及其Number的子类,第二个参数只能接收String或Object类型的泛型
    179     public static void demoLimitedFun(PointKeyValue<? extends Number,? super String> temp){
    180         demoWildcardFun(temp);
    181     }
    182     
    183     
    184     /*
    185     *    抽取打印演示函数  用于打印演示功能提示
    186     */    
    187     public static void showDemo(String demoStr){
    188         System.out.println("演示:" + demoStr);
    189     }
    190 }
  • 相关阅读:
    (数据科学学习手札09)系统聚类算法Python与R的比较
    写完代码就去吃饺子|The 10th Henan Polytechnic University Programming Contest
    《四月物语》
    PAT(甲级)2017年春季考试
    PAT(甲级)2017年秋季考试
    2019年全国高校计算机能力挑战赛 C语言程序设计决赛
    CF#603 Div2
    redhat7 上安装dummynet
    cassandra 如何写数据以及放置副本
    Eclipse中设置VM参数
  • 原文地址:https://www.cnblogs.com/ciade/p/4766432.html
Copyright © 2011-2022 走看看