zoukankan      html  css  js  c++  java
  • java_泛型

    一.   泛型类的使用

      1.定义类时使用泛型

      class 类名<字母列表>{
    
         ……
      
      }
    
      泛型常见字母:T,  K,V  ,E  ?
    
      不能使用在静态属性.静态方法上

      2.注意:

      1.泛型使用时不能指定基本类型
    
      2.使用时指定类型(引用类型,不能使用基本数据类型)
    
      3. 不能使用在静态属性.静态方法上,静态属性在编译时确定(即不能把字母用在静态属性上)
    
      4.编译时自动检查泛型
    
      5.接口中泛型只能用在方法中,不能用在全局常量 (接口只是由全局常量和抽象方法组成)

       3.代码示例

        
    public class Student<T1,T2> {
    
       private T1 name;
    
       private T2 age;
    
      
    
      
    
      
    
       public Student(T1 name, T2 age) {
    
          super();
    
          this.name = name;
    
          this.age = age;
    
       }
    
       public T1 getName() {
    
          return name;
    
       }
    
       public void setName(T1 name) {
    
          this.name = name;
    
       }
    
       public T2 getAge() {
    
          return age;
    
       }
    
       public void setAge(T2 age) {
    
          this.age = age;
    
       }
    
      
    
       public static void main(String[] args) {
    
          Student<String,Integer> stu=new Student<String,Integer>("章三",20);
    
          System.out.println(stu.getName()+stu.getAge());
    
       }
    
    }
    示例代码

     

    二.   泛型方法

      定义:

        修饰符<字母> 返回类型 方法名(字母){}

      注意:

      1.泛型方法在返回类型前面定义,
      2.在使用时确定对象类型
      3.泛型元素只能访问对象的信息,不能修改,因为不确定对象类型

       示例代码: 

      
    import java.io.Closeable;
    
    import java.io.IOException;
    
     
    
     
    
    public class TestMethod {
    
       //测试泛型方法
    
       public static void main(String[] args) {
    
          test1("abc");
    
       }
    
       //test1
    
       public static <T> void test1(T t){
    
          System.out.println(t);
    
       }
    
       //test2   extends等价于<=
    
       public static <T extends Closeable> void test2(T... t){
    
          for(T e:t){
    
             try {
    
                e.close();
    
             } catch (IOException e1) {
    
                // TODO Auto-generated catch block
    
                e1.printStackTrace();
    
             }
    
          }
    
       }
    
    }
    示例代码

    三.   泛型擦除

      定义

      1.父类为泛型类,子类可以为泛型类,也可以不是泛型类,不是泛型类需要指定子类,子类泛型代表字母和父类要相同
      
    2.子类为泛型类,父类不指定类型,称为泛型的擦除.使用object替换
      
    3.泛型擦除,要么同时擦除,要么擦除父类,子类的类型大于等于父类,仅仅擦除子类是错误的.
      
    4.属性类型(根据位置而定):       父类中:随父类而定,       子类中:随子类而定     方法重写:       随父类而定   5.泛型接口与继承是一样的   6.擦除后,不会进行类型检查

      示例代码:

      
    //父类为泛型类
    
    public abstract class Father<T> {
    
        T name;
    
       
    
        abstract <T> void test(T t);
    
    }
    
    //子类不指定类型
    
    class son<T> extends Father<T>{
    
        T t2;//自己定义的变量
    
        @Override
    
        <T> void test(T t) {
    
           // TODO Auto-generated method stub
    
        }  
    
    }
    
    //父类为泛型类,子类指定类型
    
    class son1 extends Father<String>{
    
        @Override
    
        <T> void test(T t) {
    
           // TODO Auto-generated method stub
    
        }
    
    }
    
    //子类为泛型类,父类不指定类型,称为泛型的擦除
    
    class son2<T> extends Father{
    
        @Override
    
        void test(Object t) {
    
           // TODO Auto-generated method stub
    
        }  
    
    }
    
    //子类父类同时擦除
    
    class son3 extends Father{
    
        @Override
    
        void test(Object t) {
    
           // TODO Auto-generated method stub
    
          
    
        }
    
    }
    
    /*//错误:子类擦除,父类没有擦除
    
    class son4 extends Father<T>{
    
        @Override
    
        <T> void test(T t) {
    
           // TODO Auto-generated method stub
    
          
    
        }
    
    }*/
    示例代码

    四.注意事项

      

    没有泛型数组(泛型数组不固定长度,无法开辟空间,泛型数组可以声明,不可以创建,不用)

    泛型不能多态

    返乡客已嵌套,就是复杂一点,并不难

    泛型数组可以声明,不可以创建

    声明与定义中泛型只写一次即可

  • 相关阅读:
    Linux使用lrzsz上传下载文件
    开发Wordpress主题时没有特色图片的功能
    Windows10重启之后总是将默认浏览器设置为IE
    C#泛型类的类型约束
    CentOS给网站配置Https证书
    从微软官网下载VS离线安装包的方法
    Azure Sql Database为某个数据库创建单独的访问账户
    VS2017/2019 Product Key
    VMware Workstation/Fusion 14/15 密钥
    将DataTable进行分页并生成新的DataTable
  • 原文地址:https://www.cnblogs.com/aihuadung/p/9232201.html
Copyright © 2011-2022 走看看