java泛型详解

7 篇文章 0 订阅

泛型本质

参数化类型,也就是说所操作的数据类型被指定为一个参数。
更准确的说是充当实际参数类型的【占位符】(显然占位符本身是不需要类型的,只是占位而已!!!)
extends 不仅仅是扩展,还可以用来表示泛边界,类似C中的符号常量。

泛型场景

  1. 泛型类,泛型方法,泛型接口
  2. 泛型声明 ,泛型参数 指定一个泛型类型名称的标识符
  3. java 集合框架 通用方法

泛型根源

  1. 多态实现方式: 重写,接口,抽象类和抽象方法
  2. 重写式多态 动态绑定实现
  3. 重载式多态 编译时就确定好了类型

泛型出现

  1. 没泛型,意味着同样结构的算法,仅仅因参数类型不同,需要写n个逻辑相同的重载方法。
  2. 从某种意义上讲,泛型将显性类型转换给整成了隐式转换。

泛型规则

  1. 泛型的类型参数只能是类类型(包括自定义类),不能是简单类型;

  2. 同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的

  3. 泛型的类型参数可以有多个;

  4. 泛型的参数类型可以使用extends、super语句,例如。习惯上称为“有界类型“;

  5. 泛型的参数类型还可以是通配符类型。例如

Class<?> classType =
    Class.forName("java.lang.String");

小结

好的代码会说话,献上。

package exam;

import java.util.*;

public class GenericTest {

    // 类型通配符 ? 代替具体的类型参数
    // List<具体类型实参>的父类
//   通配符参数类型
    public static void getData(List<?> data) {
        System.out.println("data :" + data.get(0));
    }

    // 带边界的类型泛型参数
    public static void getUperNumber(List<? extends Number> data) {
        System.out.println("data: " + data.get(0));
    }


    public static void main(String[] args) {
        List<String> name = new ArrayList<String>();
        List<Integer> age = new ArrayList<Integer>();
        List<Number> number = new ArrayList<Number>();

        name.add("icon");
        age.add(18);
        number.add(314);

        getData(name);
        getData(age);
        getData(number);

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值