博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java学习之——泛型
阅读量:6590 次
发布时间:2019-06-24

本文共 2575 字,大约阅读时间需要 8 分钟。

1.概要

generics enable types (classes and interfaces) to be parameters when defining classes, interfaces and methods.

泛型能在定义类,接口和方法时将类型(类和接口)作为参数。和方法声明时的形式参数很类似,都是为了在不同的输入时重用相同的代码。不同的是

形式参数输入的是而泛型是类型

2.为什么使用泛型

1.编译时更加强的(Stronger)类型检测

java编译器对泛型代码进行强类型检测,一旦检测到代码违反类型安全就发出类型错误。
修复编译错误要比运行错误容易,因为运行错误很难找到问题所在。

2.不用类型转换

//没有使用泛型        List list = new ArrayList();        list.add("without generics");        //需要强制类型转换        String s1 = (String) list.get(0);                //使用泛型        List
list2 = new ArrayList
(); list2.add("generics"); String s2 = list2.get(0);//不需要转换

3.使程序员能实现适用更加普遍的算法

通过使用泛型,使程序员能实现普遍的算法,算法将是能使用于不同类型的,能自定义的,类型安全的,易读的。

如只写一个排序方法,就能够对整形数组、字符串数组甚至支持排序的任何类型的数组进行排序。

3.具体使用

1.泛型(generic type)

A generic type is a generic class or interface that is parameterized over types.

泛型是一种通用的类或接口,通过类型参数化的。

泛型类以下面的格式定义:

class name
{ /* ... */ }

通过Box类的非泛型版和泛型版来学习一下:

非泛型:

//non-generic classpublic class Box {    private Object object;    public Object getObject() {        return object;    }    public void setObject(Object object) {        this.object = object;    }}

泛型:

//generic classpublic class Box
{ //T表示Type private T t; public T getT() { return t; } public void setT(T t) { this.t = t; }}

类型参数命名规范

按约定的习俗,类型参数的名字都是由一个大写字母构成。

E - Element 元素(used extensively by the Java Collections Framework)

K - Key 键
N - Number 数值
T - Type 类型
V - Value 值
S,U,V etc. - 2nd, 3rd, 4th types 第二种,第三种,第四种类型

调用和实例化泛型类

为了获得泛型类的引用,必须执行泛型类的调用,使用具体的值来代替T,如Integer。

//获得引用Box
integerBox;//实例化integerBox = new Box
();

泛型类的调用类似于普通的方法调用,只是泛型类传递的是类型参数(type argument)而方法调用传递的是参数(argument)。

多类型参数

泛型类可能有多种类型的参数。如下所示:

public interface Pair
{ public K getKey(); public V getValue();}public class OrderedPair
implements Pair
{ private K key; private V value; public OrderedPair(K key,V value){ this.key = key; this.value = value; } @Override public K getKey() { return key; } @Override public V getValue() { return value; }}//实例化Pair
p1 = new OrderedPair
("Even", 8);Pair
p2 = new OrderedPair
("hello", "world");//Java SE7开始出现的新语法OrderedPair
p1 = new OrderedPair<>("Even", 8);OrderedPair
p2 = new OrderedPair<>("hello", "world");//参数化的类型OrderedPair
> p = new OrderedPair<>("primes", new Box
(...));
原文地址:http://www.cnblogs.com/JohnTsai/p/4596566.html
你可能感兴趣的文章
ImageMagick再爆DoS漏洞CVE-2017-8830 7.0.5及7.0.6版本受影响 波及多个Ubuntu Linux版本
查看>>
近几年前端技术盘点以及 2016 年技术发展方向
查看>>
RedHat Linux服务器安全配置细节
查看>>
大数据架构面临技术集成的巨大障碍
查看>>
智能中控:让“各自为政”的智能家居并肩作战
查看>>
安卓耗电之谜:罪魁祸首是谁?
查看>>
剖析大数据分析方法论的几种理论模型
查看>>
选择外部数据中心:云安全十问
查看>>
TalkingData携手中青旅联科建立旅游消费者大数据实验室
查看>>
APP推广之巧用工具进行数据分析
查看>>
你如何在浏览器中体验Ubuntu
查看>>
一分钟了解负载均衡的一切
查看>>
小鱼易连全系新品正式发布 引爆音视频会议行业核聚变
查看>>
认知计算可改进企业的13个关键功能
查看>>
大数据科技如何影响现代体育
查看>>
如何配置OVN路由器?
查看>>
当人工智能遇上大数据 第九届中国云计算大会——大数据与人工智能应用论坛吸睛亮点集结...
查看>>
iOS攻防:Cycript攻·防
查看>>
干货 | 算法工程师入门第二期——穆黎森讲增强学习(一)
查看>>
云服务器 ECS 建站教程:快速搭建 ThinkPHP 框架
查看>>