Java中的泛型机制简介(含义,钻石表达式,自定义泛型))

Java中的泛型机制简介(含义,钻石表达式,自定义泛型))

泛型是java5之后加入的一个重要的特性。本文对泛型进行一个简单的介绍。

从集合的角度分析泛型的含义

泛型本质含义其实是对类型参数化。所谓类型参数化直白一点解释就是,传入的参数的类型不确定,除了形参变量名用标识符来表示,类型名同样用标识符来表示,可以理解为类型也是一个变量。

这里借助集合来对泛型进行理解。

List list1 = new ArrayList();
        list1.add("abc");
        list1.add(123);
        list1.add(true);

这是普通的集合,可以看到,集合中可以添加字符串,整形,布尔型等多种类型(严格来说是所有的类型,包括基本数据类型和引用数据类型)。

那如果想让集合中只存储一种元素呢?

这就使用到了泛型机制。

它的写法是这样的:

List<String> list2 = new ArrayList<String>();
        list2.add("acx");
        list2.add("1-1-1");

它的写法就是在类名后面写尖括号<>,<>里面写上传入的类型名,构造方法中也是这样。

如果像这样使用了泛型,再在集合中存储其他类型就会报错。
比如:
报错
第三行报错了,因为指定了集合中只能存储字符串类型。

钻石表达式

在Java7之后引入了类型自动推断机制,上面写过的这行代码:

List<String> list2 = new ArrayList<String>();

可以简化成:

List<String> list2 = new ArrayList<>();

构造方法后的<>内省略类型名,因为这个符号长得像钻石,故得名钻石表达式

自定义泛型

在自己写的 或者 接口 里面也可以指定泛型。
这里先看一下Java中List集合源码是如何指定泛型的:

public interface List<E> extends Collection<E> {}

可以看到定义泛型就是在类名或接口名后写上<>,<>里面写一个标识符,标识符可以随便写,List集合后面写的是 E ,E 是element的首字母。

java源代码中经常出现的是:E 和 T
E是Element单词首字母。
T是Type单词首字母。

看一下 List 集合中的add()的源码:

boolean add(E e);

这个方法的意思就是传入一个E类型的对象 e。

所以自定义泛型也按这个套路来就可以了,给一个例子:

public class GenericTest02<T> {
    public void whatAmI(T o){
        System.out.println("I am a "+o);
    }

    public static void main(String[] args) {
        GenericTest02<Cat> instance = new GenericTest02<>();
        instance.whatAmI(new Cat());
    }
}

class Cat{
}

运行结果

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值