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<String> list2 = new ArrayList<String>();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<T1, T2, ..., Tn> { /* ... */ }

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

非泛型:

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

泛型:

//generic class
public class Box<T> {//T表示Typeprivate 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<Integer> integerBox;
//实例化
integerBox = new Box<Integer>();

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

多类型参数

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

public interface Pair<K,V>{public K getKey();public V getValue();
}
public class OrderedPair<K,V> implements Pair<K,V>{private K key;private V value;public OrderedPair(K key,V value){this.key = key;this.value = value;}@Overridepublic K getKey() {return key;}@Overridepublic V getValue() {return value;}
}
//实例化
Pair<String, Integer> p1 = new OrderedPair<String, Integer>("Even", 8);
Pair<String, String>  p2 = new OrderedPair<String, String>("hello", "world");
//Java SE7开始出现的新语法
OrderedPair<String, Integer> p1 = new OrderedPair<>("Even", 8);
OrderedPair<String, String>  p2 = new OrderedPair<>("hello", "world");
//参数化的类型
OrderedPair<String, Box<Integer>> p = new OrderedPair<>("primes", new Box<Integer>(...));
原文地址:http://www.cnblogs.com/JohnTsai/p/4596566.html

Java学习之——泛型相关推荐

  1. Java学习笔记(二一)——Java 泛型

    [前面的话] 最近脸好干,掉皮,需要买点化妆品了. Java泛型好好学习一下. [定义] 一.泛型的定义主要有以下两种: 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个 ...

  2. java关于泛型的实验代码_[ Java学习 ] 泛型类的应用实验

    成文原因: 这篇文章是我这周所做的 Java 实验题的一个小总结. 这次实验让我深刻赞同了我们 Java 老师在这节实验课前告诉我们的话: 最重要的是把问题想明白,它要怎么拆分成几个类,每个类里究竟需 ...

  3. Java学习day18-集合框架2(泛型,工具类,TreeMap)

    集合框架2 今日目标 一.泛型 1.泛型类 2.泛型接口 3.泛型方法 4.泛型通配符 二.集合工具类 三.TreeMap和TreeSet 作业: 今日目标 泛型 集合工具类 自带排序集合 一.泛型 ...

  4. Java学习 第十六天(泛型)

    Java学习 第十六天---泛型与集合 第一章 泛型 1.1 泛型概述 1.2 泛型类 1.3 泛型类练习---抽奖问题 1.4 泛型类的子类 1.5 泛型接口 1.6 重写泛型父类或泛型接口中方法的 ...

  5. 《Java 核心技术卷1 第10版》学习笔记 ------ 泛型【进阶】

    这部分主要是结合 Java 虚拟机实现泛型的原理进一步研究如何更好的使用泛型. 8.5 泛型代码和虚拟机 虚拟机没有泛型类型对象---所有对象都属于普通类.所以编译器在编译的时候会进行类型擦除操作. ...

  6. yii2数组转为对象_好程序员Java学习路线分享java为什么不支持泛型数组

    本篇文章好程序员为大家一下java为什么不支持泛型数组,希望对大家有所帮助. public class Pair { public void info( ) { System.out.println( ...

  7. java学习(134):泛型通配符的使用

    import java.util.ArrayList; import java.util.List;//泛型通配符的使用 public class test73 {public static void ...

  8. java学习(133):泛型

    public class Employee {private String name;private String ags;public void setName(String name) {this ...

  9. Java学习--泛型

    个人理解,所谓的泛型就是将数据类型像参数(称为类型参数或者泛型参数)一样传入类,接口或者方法中,这个类型参数可以当作普通的数据类型,进行变量的声明(成员变量,局部变量(包括方法参数)),指明返回值类型 ...

最新文章

  1. 使用Java企业级技术开发大型系统(3)
  2. (原创)用c++11打造好用的any
  3. 程序员能力矩阵 你属于哪一层?
  4. 正确实现用spring扫描自定义的annotation
  5. 推荐系统——开源代码
  6. Laravel 5.2问题-----postman进api的post请求,为什么出现Forbidden?
  7. applicationcontext理解使用
  8. 计算机网络基础笔记 运输层协议UDP/TCP
  9. LINUX 中htop的安装
  10. LeetCode题解——Palindrome Number
  11. MEncoder的基础用法—6.6. 改变电影大小
  12. 因打印日志而引发的故障
  13. 美容院店务管理系统帮助门店管理哪些方面 ?
  14. JavaScript中常见的设计模式
  15. python爬取微信公众号文章
  16. 复选框至少选择一项_如果没有设计师,您至少要选98种材料,学会35项工艺!...
  17. 桌面计算机 回收站图标,桌面回收站图标不见了怎么解决【图文】
  18. 二进制(二):十进制转二进制的两种方法
  19. java 监听器作用_浅谈java监听器的作用
  20. 3D设计必备!5个免高质量的 HDRI 环境贴图网站

热门文章

  1. Arts 第六周(4/22 ~ 4/28)
  2. [日志]08/19/2007
  3. 王朔:中国文化沉淀了大量腐烂变质垃圾
  4. 如何让应用程序托盘化
  5. Scott Mitchell 的ASP.NET 2.0数据教程之十七:: 研究插入、更新和删除的关联事件
  6. 大数据中存在哪些误解
  7. 数据中台对企业意义和作用有哪些
  8. 可视化大数据分析软件要掌握的6个核心技术
  9. 牛客编程巅峰赛S2第7场 - 钻石王者
  10. js获取日期选择器值html,利用Query+bootstrap和js两种方式实现日期选择器