文档章节

Java泛型的理解和用法

YH_猿员猿
 YH_猿员猿
发布于 2016/07/21 17:32
字数 559
阅读 14
收藏 0

泛型的由来:

    在java开发中,泛型和集合框架结合起来创建对象会比较的常用。泛型是指参数化类型的能力,它可以定义类,方法,接口等。随后在编译的过程中,由编译器自动的转换成具体的类型替换它。
    之所以使用泛型是因为早期的泛型是Object来使用得,但是在实际的使用时,在类型的转换上存在隐患。比如我们定义了一个Object,实例的时候将它转换成String,但是在接收的时候我们又接受为int型,这样在程序的代码片中是不会报错的,但是在执行的过程中就会报错。所以java提供泛型来解决安全问题。

泛型的使用:
1.定义泛型类

public class Toll<E>{

    }

2.定义泛型类中泛型方法

public class Toll<E>{

        private E e;

        public E getE(){
            return e;
        }

        public void setE(E e){
            this.e = e;
        }
    }

这里的泛型类中的泛型必须和类定义的泛型保持一致,如果不一致则需要在方法中定义自己泛型

        public<T> void show(T t){
            System.out.println(t);
        }

3.泛型接口的使用

    interface Inter<T>{
        public void show(T t);
    }

4.泛型通配符?

  1. 非受限统配类型 ?表示任何一种对象类型 ,等价于? extends Object。
  2. 受限通配类型 ? extends T ,表示T或T的一个未知子类型。
  3. 下限通配 ?super T,表示T或T的一个父类型。

利用泛型自定义栈

/** 1. 2. @author hp 3. 创建一个空栈 4. @param <E> */
public class GenericStack<E> {
    private ArrayList<E> list = new ArrayList<>();
    public GenericStack() {
    }
    /* * 栈的元素个数 */
    public int getSize(){
        return list.size();
    }
    /* * 返回栈顶元素 */
    public E peek(){
        return list.get(getSize()-1);
    }
    /* * 向栈的顶端添加一个元素 */
    public void push(E o){
        list.add(o);
    }
    /* * 弹出栈顶元素并删除这个元素 */
    public E pop(){
        E o = list.get(getSize()-1);
        list.remove(getSize()-1);
        return o;
    }
    public boolean isEmpty(){
        return list.isEmpty();
    }
}

注:!!!

  1. 泛型不能使用new E(),不能使用泛型类型参数创建对象。
  2. 不能使用new E[],不能使用泛型创建数组
  3. 在静态方法中不允许类的参数是泛型类型
  4. 异常类不能是泛型

本文转载自:http://blog.csdn.net/yin569258/article/details/50886910

共有 人打赏支持
YH_猿员猿
粉丝 0
博文 12
码字总数 0
作品 0
徐汇
程序员
私信 提问
Java中的泛型 (上) - 基本概念和原理

下面我们来详细讨论Java中的泛型,虽然泛型的基本思维和概念是比较简单的,但它有一些非常令人费解的语法、细节、以及局限性,内容比较多。 所以我们分为三节,逐步来讨论,本节我们主要来介...

笔记12
2016/10/29
394
0
Java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。 本文参考java 泛型详解、Java中的泛型方法、 java泛型详解 1 概述 泛型在j...

hensemlee
2018/09/23
0
0
深入理解 Java 中的 Lambda

我花了相当多的阅读和编码时间才最终理解Java Lambdas如何在概念上正常工作的。我阅读的大多数教程和介绍都遵循自顶向下的方法,从用例开始,最后以概念性问题结束。在这篇文章中,我想提供一...

李三石
2018/06/19
2.6K
6
Java 8新特性探究(六)泛型的目标类型推断

简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。通俗点将就是“类型的变量”。这种类型变量可以用在类、接口和方法的创建中。...

OSC闲人
2013/12/14
0
3
Kotlin 泛型 VS Java 泛型

建议先阅读我的上一篇文章 -- Java 泛型 和 Java 泛型一样,Kotlin 泛型也是 Kotlin 语言中较难理解的一个部分。Kotlin 泛型的本质也是参数化类型,并且提供了编译时强类型检查,实际上也是伪...

JohnnyShieh
2018/06/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7 Nginx+rtmp 搭建流媒体服务器

一. gcc 安装 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装: yum -y install gcc gcc-c++ 二. PCRE pcre-devel 安装 PCRE(Perl Compatib...

legend3
23分钟前
2
0
“别更新了,学不动了” 之:全栈开发者 2019 应该学些什么?

转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文转载自 公众号 infoqchina 对于什么是全栈开发者并没有一个明确的定义。但是,有一件事是...

葡萄城技术团队
39分钟前
5
0
OSChina 周五乱弹 —— 姑娘馋的口水都留下来了。

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @且无需多言 :分享Fall Out Boy的单曲《Disloyal Order Of Water Buffaloes》 《Disloyal Order Of Water Buffaloes》- Fall Out Boy 手机党...

小小编辑
今天
611
14
vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
2
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部