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

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

泛型类型必须是引用类型。不能用int、double或char等基本数据类型来替换泛型类型

1、定义泛型类和接口

例子:

public class TestStack
{ private ArrayList
list = new ArrayList(); public TestStack() { // TODO Auto-generated constructor stub } public int getSize() { return list.size(); } public E peek() { E e = list.get(getSize() - 1); return e; } public E pop() { E e = peek(); list.remove(getSize() - 1); return e; } public void push(E e) { list.add(e); } public boolean isEmpty() { return list.isEmpty(); } public String toString() { return "stack: " + list.toString(); } public static void main(String [] args) { TestStack
stack1 = new TestStack<>(); stack1.push("London"); stack1.push("Pairs"); stack1.push("Berlin"); System.out.println(stack1.toString()); stack1.pop(); System.out.println(stack1.toString()); }}

 

2、泛型方法

要声明方法的泛型类型,请为方法返回类型放置泛型类型,例如<E> void max(E o1,E o2)

 

3、对一个对象数组进行排序

例子:

public class GenericSort1 {    public static void main(String [] args) {                Integer [] intArray = {
new Integer(2),new Integer(4),new Integer(3),new Integer(1)}; Double [] doublesArrray = {
new Double(3.4),new Double(1.3),new Double(-22.1)}; String [] stringArray = {"zzzzz","ddddd","qqweasd"}; printlist(intArray); sort(intArray); printlist(intArray); printlist(doublesArrray); sort(doublesArrray); printlist(doublesArrray); printlist(stringArray); sort(stringArray); printlist(stringArray); } public static
> void sort(E [] list) { //E是Comparable的子类型,其次还指定进行比较的元素是E类型 E currentMin; int currentMinIndex; for(int i=0; i
0) { currentMin = list[j]; currentMinIndex = j; } } if(currentMinIndex != i) { list[currentMinIndex] = list[i]; list[i] = currentMin; } } } public static
void printlist(E [] list) { for(int i=0; i

 

4、通配类型

通配类型有三种形式:

1、?  (非受限通配   跟 ? extends Object 一样)

2、? extends T (受限通配  表示T或T的一个子类型) 

3、? super T   (下限通配 表示T或T的一个父类型)

 

5、消除泛型和对泛型的限制

泛型是使用一种称为类型消除的方法来实现的。

泛型存在编译时。一旦编译器确认泛型类型是安全使用的,就会将他转换为原始类型。

例子:

编译器会先检查a代码里泛型是否正确使用,然后将它翻译成b

 

 

 

6、泛型的限制

1、不能使用new E()

不能使用泛型类型参数创建实例。列如:

E object = new E(); 错误

2、不能使用new E  [ ]

不能使用泛型类型参数创建数组。列如:

E [ ] elements = new E[capcacity];

但可以通过创建一个Object类型的数组,然后将它的类型转换为E[ ] 来规避这个限制。 例如:

E [ ] elements = (E[ ]) new Object[dapcacity];

3、在静态上下文中不允许的参数是泛型类型

 

4、异常类不能是泛型的

 

转载于:https://www.cnblogs.com/zquan/p/9354721.html

你可能感兴趣的文章
struts1和struts2的区别
查看>>
Redis常用命令
查看>>
2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
查看>>
微软职位内部推荐-Sr. SE - Office incubation
查看>>
C#类与结构体究竟谁快——各种函数调用模式速度评测
查看>>
我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)...
查看>>
poj 题目分类
查看>>
windows 安装yaml支持和pytest支持等
查看>>
读书笔记:季羡林关于如何做研究学问的心得
查看>>
面向对象的优点
查看>>
套接口和I/O通信
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
浅谈性能测试
查看>>
Winform 菜单和工具栏控件
查看>>
CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
查看>>
巧用Win+R
查看>>
浅析原生js模仿addclass和removeclass
查看>>
Python中的greenlet包实现并发编程的入门教程
查看>>
java中遍历属性字段及值(常见方法)
查看>>
深入理解jQuery框架-框架结构
查看>>