zoukankan      html  css  js  c++  java
  • 泛型

    1. JDK5之后,新增了泛型(Generic)语法,可以在类或方法中预支地使用未知的类型,集合创建时若不指定数据类型,默认为Object类型

    2. 泛型的好处:①将运行时期的异常,转移到了编译时期;②避免了类型强转的麻烦

    泛型的定义

    泛型类

    格式:
    修饰符 class 类名<代表泛型的变量> {  }
    
    
    例如:
    class ArrayList<E>{ 
        public boolean add(E e){ }
    
        public E get(int index){ }
           ....
    }

    在创建对象的时候确定泛型
    例如,ArrayList<String> list = new ArrayList<String>();

    泛型方法

    格式:
    修饰符 <代表泛型的变量> 返回值类型 方法名(参数){  }
    
    例如:
    public class MyGenericMethod {      
        public <V> void show(V v) {
            System.out.println(v.getClass());
        }
        
        public <V> V show2(V v) {    
            return v;
        }
    }
    
    调用方法时,确定泛型
    public class GenericMethodDemo {
        public static void main(String[] args) {
            // 创建对象
            MyGenericMethod mm = new MyGenericMethod();
            // 演示看方法提示
            mm.show("aaa");
            mm.show(123);
            mm.show(12.45);
        }
    }

    泛型接口:

    格式:
    修饰符 interface接口名<代表泛型的变量> {  }
    
    例如:
    public interface MyGenericInterface<E>{
        public abstract void add(E e);
        
        public abstract E getE();  
    }
    
    编写实现类时有两种方式:
    ①实现类上指定泛型 
    public class MyImp1 implements MyGenericInterface<String> {
        @Override
        public void add(String e) {
            // 省略...
        }
    
        @Override
        public String getE() {
            return null;
        }
    }
    
    ②实现类上继续不指定泛型,在创建实现类对象时指定泛型
    public class MyImp2<E> implements MyGenericInterface<E> {
        @Override
        public void add(E e) {
                // 省略...
        }
    
        @Override
        public E getE() {
            return null;
        }
    }
    
    /*
     * 使用
     */
    public class GenericInterface {
        public static void main(String[] args) {
            MyImp2<String>  my = new MyImp2<String>();  
            my.add("aa");
        }
    }

    泛型通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符

    public static void main(String[] args) {
        Collection<Intger> list1 = new ArrayList<Integer>();
        getElement(list1);
        Collection<String> list2 = new ArrayList<String>();
        getElement(list2);
    }
    public static void getElement(Collection<?> coll){}
    //?代表可以接收任意类型
    // 泛型不存在继承的概念

    受限泛型

    泛型的上限:类型名称 <? extends 类 > 对象名称
    意义:只能接收该类型及其子类
    
    泛型的下限:类型名称 <? super 类 > 对象名称
    意义:只能接收该类型及其父类型
  • 相关阅读:
    Go标准库Context
    事务并发处理: DB+ORM+逻辑代码
    日志:slf4j+log4j+maven配置
    Shiro workshop
    JSP Workshop
    sql records
    Java内存模型(JMM)
    Application, JDBC, 数据库连接池, Session, 数据库的关系
    Java位操作全面总结
    Effective Java总结
  • 原文地址:https://www.cnblogs.com/svipero/p/12425941.html
Copyright © 2011-2022 走看看