zoukankan      html  css  js  c++  java
  • 泛型

    泛型是一种参数化的集合,它限制了添加进集合的类型。泛型的本质是一种参数化类型。多态也可以看成是泛型的机制。一个类继承了父类,那么就能通过它的父类找到对应的子类,但是不能通过其他类找到具体要找的类。泛型的设计就是希望对象或方法的表达能力刚广泛。

    1、用泛型表示类

    package day09;
    
     
    
    //此处的T可以随便写任意标识,常见的有T、E、K、V等形式的参数用于表示泛型
    
    public class GenericDemo04<T> {
    
        //value这个成员变量的类型为T,T的类型由外部指定
    
        private T value;
    
     
    
        public GenericDemo04(T value) {
    
            this.value = value;
    
        }
    
     
    
        public T getValue() {    //泛型方法getkey的返回值类型是T,T的类型由外部指定
    
            return value;
    
        }
    
     
    
        public void setValue(T value) {
    
            this.value = value;
    
        }
    
     
    
    }

    2、用泛型表示接口

    package day09;
    
     
    
    //定义一个泛型接口
    
    public interface GeneratorDemo<T> {
    
        public T next();
    
    }

    一般泛型接口常用于生成器(generator)中,生成器相当于对象工厂,是一种专门用来创建对象的类。

    3、泛型表示方法

    package day09;
    
     
    
    public class GenericMethods {
    
        public <T> void f(T x) {
    
            System.out.println(x.getClass().getName());
    
        }
    
    }

    4、泛型通配符

    List是泛型类,为了表示各种泛型list的父类可以使用类型通配符,类型通配符使用问号(?)表示,它的元素类型可以匹配任何类型。例如:

     1 package day09;
     2 
     3  
     4 
     5 import java.util.*;
     6 
     7  
     8 
     9 class Generic {
    10 
    11     public static void main(String[] args) {
    12 
    13         List name = new ArrayList<String>();
    14 
    15         List<Integer> age = new ArrayList<Integer>();
    16 
    17         List<Number> number = new ArrayList<Number>();
    18 
    19         name.add("yang");
    20 
    21         age.add(19);
    22 
    23         number.add(90);
    24 
    25         DemoGeneric(name);
    26 
    27         DemoGeneric(age);
    28 
    29         DemoGeneric(number);
    30 
    31  
    32 
    33     }
    34 
    35  
    36 
    37     public static void DemoGeneric(List<?> data) {
    38 
    39         System.out.println("测试一下:" + data.get(0));
    40 
    41     }
    42 
    43  
    44 
    45 }

    运行结果:

     

    上界通配符:<? extends ClassType>该通配符为ClassType的所有子类型。它表示的是任何类型都是ClassType类型的子类。

    下界通配符:<? super ClassType>该通配符为ClassType的所有超类型。它表示的是任何类型的父类都是ClassType

    欢迎批评指正,提出问题,谢谢!
  • 相关阅读:
    notepad++中快速插入当前时间方法
    ICE学习笔记一----运行官方的java版demo程序
    使用filter统一设置编码
    hibernate学习笔记之四 Hibernate的增删改查
    hibernate学习笔记之三 持久化的三种状态
    hibernate学习笔记之二 基本环境搭建
    How To Install Proxmox Nested on VMware ESXi (Full Support OpenVZ & KVM)
    struts1四:常用标签
    struts1三:struts1的实现原理
    struts1二:基本环境搭建
  • 原文地址:https://www.cnblogs.com/xxeleanor/p/14406446.html
Copyright © 2011-2022 走看看