文档章节

Java泛型的理解和用法

YH_猿员猿
 YH_猿员猿
发布于 2016/07/21 17:32
字数 559
阅读 12
收藏 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是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
06/02
0
0
Kotlin语言中的泛型设计哲学

Kotlin语言的泛型设计很有意思,但并不容易看懂。关于这个部分的官方文档,我反复看了好几次,终于弄明白Kotlin语言泛型设计的背后哲学。这篇文章将讲述Kotlin泛型设计的整个思考过程及其背后...

欧阳锋
04/16
0
0
Java 8新特性探究(六)泛型的目标类型推断

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

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

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

JohnnyShieh
06/11
0
0
Java高级特性入门——泛型、反射和注解!

摘要: 只有掌握了Java的高级特性,这门语言才算真正地登堂入室。本文将带领大家一同了解Java语言的三个常用的高级特性——泛型、反射和注解。 专家简介: 澳明 ,阿里巴巴高级开发工程师,来...

Java高级架构
05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

内存模型是怎么解决缓存一致性的?

在再有人问你Java内存模型是什么,就把这篇文章发给他。这篇文章中,我们介绍过关于Java内容模型的来龙去脉。 我们在文章中提到过,由于CPU和主存的处理速度上存在一定差别,为了匹配这种差距...

Java填坑之路
19分钟前
1
0
vue-cli 3.0 初体验

最近复习了下vue,突然发现vue-cli已经更新到3.0版本了,并且变化蛮大,看来要不停的学习,真是一入前端深似海。 安装步骤: 1、全局安装 npm install -g @vue/cli Vue CLI 的包名称由 vue-...

tianyawhl
21分钟前
0
0
Angular进阶之路

【初级】会写页面,能出东西。 给定环境和 rest API,不用第三方库,能在十分钟内完成一个 master/detail 结构的带路由的应用(可以不管美观)。 知识点:Angular CLI、组件、路由、HTTP 服务...

陆小七的主页
23分钟前
0
0
Redis缓存数据库安全加固指导(一)

背景 在众多开源缓存技术中,Redis无疑是目前功能最为强大,应用最多的缓存技术之一,参考2018年国外数据库技术权威网站DB-Engines关于key-value数据库流行度排名,Redis暂列第一位,但是原生...

中间件小哥
23分钟前
0
0
百万级数据mysql分区

1. 什么是表分区? 表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。 2. 表分区与分表的区别 分表...

罗文浩
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部