Java泛型学习

一、 序言

一直在用的语言是Java,本以为掌握的已经不错了,但最近面试才发现之前自己只是停留在熟料使用的状态,距离编写出优雅,高可复用的代码还有一定的距离。强烈建议大家有机会一定要去看一下JDK源码,写的非常漂亮,可以学到不少东西!

二、 泛型

  1. 为什么要使用泛型?
    进行日常开发时,当面对有重复的代码时,我们自然而然的将公共部分抽取出来封装成一个函数或方法,然后进行频繁调用。同样的道理,在进行功能开发时,很有可能两个方法的功能,实现逻辑一样,只是对应的数据类型不同,那么考虑能不能再抽象一下,进行一下更高层次的“封装”呢?答案是肯定的,使用Java提供的泛型就可以实现这一功能!

通过泛型可以定义类型安全的数据结构(类型安全),而无须使用实际的数据类型(可扩展)。这能够显著提高性能并得到更高质量的代码(高性能),这样就可以重用数据处理算法,而无须复制类型特定的代码(可重用)。在概念上,泛型类似于 C++ 模板,但是在实现和功能方面存在明显差异。
Java泛型的核心概念:告诉编译器使用什么类型,然后编译器帮你处理一切细节。

  1. 泛型使用语法
    泛型的具体使用有泛型类,泛型接口和泛型方法,在不同层次进行合理使用可以极大的增强程序的可扩展性,减少冗余代码。贴一篇总结的很好的博客

  2. 泛型类
    泛型类在类名后面添加了类型参数声明部分,一般是,在JDK中泛型类经常用在容器类中!

    
    class GenericClass<T> {
        private T attr;
    
        public GenericClass(T attr) {
            this.attr = attr;
        }
    
        public T getAttr() {
            return attr;
        }
    
        public void setAttr(T attr) {
            this.attr = attr;
        }
    }
    
    
  3. 泛型接口
    泛型接口与泛型类的定义及使用基本相同。泛型接口常被用在各种类的生产器中

public interface Generator<T> {
    public T next();
}
  1. 泛型方法
    泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型 。
/**
 * 泛型方法的基本介绍
 * @param tClass 传入的泛型实参
 * @return T 返回值为T类型
 * 说明:
 *     1)public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。
 *     2)只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。
 *     3)<T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。
 *     4)与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型。
 */
public <T> T genericMethod(Class<T> tClass)throws InstantiationException ,
  IllegalAccessException{
        T instance = tClass.newInstance();
        return instance;
}

注意泛型方法与泛型类中方法的区别
6. 泛型使用命名习惯

为了更好地去理解泛型,我们也需要去理解java泛型的命名规范。为了与java关键字区别开来,java泛型参数只是使用一个大写字母来定义。各种常用泛型参数的意义如下:
E — Element,常用在java Collection里,如:List,Iterator,Set
K,V — Key,Value,代表Map的键值对
N — Number,数字
T — Type,类型,如String,Integer等等
S,U,V etc. - 2nd, 3rd, 4th 类型,和T的用法一样

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值