java泛型知识总结

#泛型
所谓的泛型,就是允许在定义类、接口、方法时使用类型形参,这个类型形参将在声明变量、创建对象、调用方法时动态指定(即传入实际的类型参数)。

静态方法、静态初始化块、静态变量的声明不允许使用类型形参。
    
    List<String> strList = new ArrayList<>();
    //限定了该List集合只能保存字符串对象,不能将其他类型的数据放进List中

#### 定义泛型接口、类 ####
    
定义接口时定义一个类型形参E,在接口里E可以作为类型使用。

    public interface List<E>{
        void add(E e);
        Iterator<E> iterator();
    }

可以为任何类、接口添加泛型声明,使用类时可以传入实际形参。
    
    public class Apple<T>{
        //使用T类型定义实例变量
        private T info;
        public Apple(T info){
            this.info = info;
        }
        public void setInfo(T info){
            this.info = info;
        }
        public T getInfo(T info){
            return this.info;
        }
    }

    //实例化时
    Apple<String> a = new Apple<>("苹果");

    Apple<Double> b = new Apple<>("5.67");

#### 从泛型类派生子类 ####
    
    public class A extends Apple<String>//在Apple类中所有的T形参都会替换成String类型

    或者

    public class A extends Apple//编译器会提出泛型警告

    //错误代码
    public class A extends Apple<T>{}

#### 类型通配符 ####

为了表示各种泛型的父类,可以使用类型通配符(?),将一个问号作为类型实参传给List集合,写作:List<?>(意思是元素类型未知的List)。通配符的元素类型可以匹配任何类型。

类型通配符上限(下限用super):
    
    //表示Shape泛型List的父类
    List<? extends Shape>//在使用时只要List后面的尖括号的类型是Shape的子类型即可

设定类型形参上限(下限用super):

    public class Apple<T extends Number>{
        private T apple;
    }

#### 泛型方法 ####
所谓的泛型方法,就是在声明方法时定义一个或者多个类型形参,格式如下:
    
    修饰符 <T,S> 返回值类型  方法名 (形参列表){
        方法体;
    } 

示例:

    static <T> void fromArrayToCollection(T[] a, Collection<T> c){
        for (T o: a) {
            c.add(o);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值