文档章节

java的泛型是个有趣的东西

蚂蚁的世界
 蚂蚁的世界
发布于 2015/06/08 10:29
字数 286
阅读 132
收藏 4

因为泛型的擦除(erasure),任何在运行时需要知道确切类型信息的操作都将无法工作。

public class Erased<T> {
    private final int SIZE = 100;
    public static void f(Object arg){
        if (arg instanceof T){}        // error
        T var = new T();                  // error
        T[] array = new T[SIZE];    //  error
        T[] array = (T[])new Object[SIZE]; // unchecked warning
    }
}

请看上述代码,"arg instanceof T",编译器会认为写这段程序的人是想检查arg是否为某一个类。但是erasure导致这个人的愿望落空,所以就把这段语句置为error。


编译器发现这段代码时“T[] array = new T[SIZE]”,它不知道到底要创建一个什么类型的数组,它没有选择把这段代码编译成创建Object数组,也许有它的理由,但是我不知道为什么。也许它认为这不符合编写这段程序的人的愿望。


编译器发现这段代码“T[] array = (T[])new Object[SIZE]",它认为这可以通过error检查,但是这里有个警告,会有隐藏的问题。然后它把这段代码编译成了Object[] array = new Object[SIZE]。


© 著作权归作者所有

共有 人打赏支持
蚂蚁的世界
粉丝 6
博文 29
码字总数 7627
作品 0
昌平
程序员
私信 提问
Scala学习笔记(1):Scala语言的来源

Scala是“scalable language”,也就是“可扩展”语言是意思。Scala是一种静态类型语言,它融合了函数式编程和面向对象编程和的思想,前者让它可以很方便快速地构建可用程序,后者则让其具有...

chengyao2
2013/04/28
0
0
Java 8新特性探究(六)泛型的目标类型推断

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

OSC闲人
2013/12/14
0
3
某些人就不要拉低Java黑的平均水平了

说的就是你@eechen 我们这些成天黑Java的,一般都黑Java的type system是unsound的,Java的泛型实现是错误的(Type Erasure),Java没有值类型影响实时性,Java没有运算符重载,Java既没有fir...

江湖习气
2017/04/03
457
2
用JS角度看Java,关于数组

很长时间没来简书了,说不上忙,却也不想写东西,不想学习; 只是最近突发奇想,想用java实现js数组——及用一个List对象去储存各种各样类型的数据。js是弱类型语言,其灵活的语法给开发带来...

扶摇十万里
11/09
0
0
Kotlin 泛型 VS Java 泛型

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

JohnnyShieh
06/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux脚本中父shell与子shell 执行的几种方式

本文主要介绍以下几个命令的区别: shell subshell source $ (commond) `commond` Linux执行Scripts有两种方式,主要区别在于是否建立subshell 1. source filename or . filename 不创建sub...

问题终结者
17分钟前
1
0
安装jdk和Tomcat

12月12日任务 16.1 Tomcat介绍 16.2 安装jdk 16.3 安装Tomcat Tomcat介绍 Tomcat是apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由apache、Sun和其他一些...

robertt15
18分钟前
3
0
Beetl 免费视频

来自 https://my.oschina.net/gking?q=Beetl ,Beetl终于有人录制视频了 项目git地址:https://gitee.com/gavink/beetl-blog 视频地址:下载下来会更清晰,视频比较长,可使用倍速看 百度网盘...

闲大赋
30分钟前
0
0
isEmpty和null的区别

isEmpty和null的区别: 1.一个是对象为空(IsNull),一个是值为空(IsEmpty) 2.IsNull指任务类型变量是否为空包括对象类型的变量。 IsNull函数: 功能:返回Boolean的值,指明表达是否不包...

DemonsI
57分钟前
3
0
Centos7 安装mysql与php

https://blog.csdn.net/qq_36431213/article/details/79576025 官网下载安装mysql-server 依次使用下面三个命令安装 wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.r......

Yao--靠自己
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部