java 泛型的几点备忘

1、在java虚拟机中是没有泛型的,所有泛型类的参数都会被擦除,如下:

public void test(List<String> list, int num){}

public void test(List<Integer> list, int num){}

这两个方法对于java编译器来说是一样的,因此无法编译通过。

2、下面两种写法都是OK的,但推荐用后者:

public <I extends Fruit> void test(List<I> list){}

public void test(List<? extends Fruit> list){}

3、关于<? extends >和 <? extends >

        //<? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类
        //<? super T> 表示类型下界,表示参数化类型是此类型的超类型(父类型)

        List<? extends Fruit> list = new ArrayList<Apple>();
        //flist.add(new Fruit()); 编译错误
        list.add(null);
        Apple apple = (Apple) list.get(0);
        Fruit item  = (Fruit) list.get(0);

        List<? super Fruit> list1 = new ArrayList<Fruit>();
        list1.add(new Fruit());
        list1.add(new Apple());
        list1.add(null);

        Fruit item1 = (Fruit) list1.get(0);
        //Apple apple = (Apple)list1.get(0);编译错误
时间: 2024-10-19 06:58:12

java 泛型的几点备忘的相关文章

java开发微信公众平台备忘

简单记录下前段时间开发的电子书的 公众平台的一些备忘及开发心得经验等 eclipse的一些技巧: 1.ctrl+shift+o 自动添加必要import空间及移除无用import 项目备忘+说明 1.struts配置 :resources->struts.xml 经验心得: 1.struts在前台显示后台属性:${属性名称},

Java学习网站汇总【备忘】

Java学习网站http://www.javaxxz.com Java学习者论坛,资源非常多,适合初学者. http://www-900.ibm.com/developerWorks/cn/java/index.shtml IBM的JAVA专题——永远的蓝色巨人 http://www.huihoo.com 灰狐动力——Enterprise Open Source http://www.jdon.com J道——JAVA和J2EE解决之道 http://www.chinaunix.net Chin

java String分配内存空间备忘

栈内存 堆内存 基础类型,对象引用(堆内存地址) 由new创建的对象和数组, 存取速度快 相对于栈内存较慢 数据大小声明周期必须确定 分配的内存由java虚拟机自动垃圾回收器管理.动态分配内存大小 共享特性 栈中如果有字符串,则直接引用 如果没有,开辟新的空间存入值 每new一次在堆内存中生成一个新的对象. 创建之后值可以改变 String类声明后则不可改变 一.栈内存 基础类型int, short, long, byte, float, double, boolean, char和对象引用 栈

本人小白,Java学习网站汇总【备忘】

Java学习网站http://www.javaxxz.com Java学习者论坛,资源非常多,适合初学者.http://www-900.ibm.com/developerWorks/cn/java/index.shtml IBM的JAVA专题--永远的蓝色巨人http://www.huihoo.com 灰狐动力--Enterprise Open Sourcehttp://www.jdon.com J道--JAVA和J2EE解决之道http://www.chinaunix.net ChinaUni

java平台解协议相关备忘

来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=276GPS平台.网站建设.软件开发.系统运维,找森大网络科技!http://cnsendnet.taobao.com 1.将数组编码成字符串2.2个字节转化成整形,4个字节转化成整形BitConverter.ToUInt16()3.Byte字节转化成二进制字符串 来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=276GPS平台.网站建设.软件开发.

java正则表达式备忘

最近框架和爬虫上常要处理字符串匹配和替换的场景,备忘. 非贪婪模式 比如要匹配html文本中的连接,例如a href="www.abc.com/xyz/o"需要替换为a href="www.bing.com?q=o",可以如下: static final String OSCHINA_LINK = "\"(https://www\\.abc\\.net/p/)(.+)\""; static Pattern pattern =

Annotation 使用备忘

title: Annotation 使用备忘 date: 2016-11-16 23:16:43 tags: [Annotation] categories: [Programming,Java] --- 概述 本文记录注解 Annotation 的概念和使用. Annotation 注解 Why 需要注解 在代码中常有些重复的代码,这些代码纯手工太耗时.可以通过一定的标记,然后处理即可. What 是注解? Annotation 分类 标准 Annotation 包括 Override, De

RxJava & RxAndroid备忘

"你问我要去向何方,我指着大海的方向" 今天在刷G+的时候看到Dave Smith推荐了一个视频 <Learning RxJava (for Android) by example> 点进去看了一下,原来是位熟悉的"阿三哥",视频封面如下:(没有歧视的意思,不要喷我啊~,为什么感到熟悉?接着往下看) 几乎同时也看到了JetBrains在G+也推荐了篇在Medium上的博文 <RxAndroid And Kotlin (Part 1)> ,然后

我所认识的java泛型(主要讨论通配符的使用)

在使用java泛型的时候,经常会遇到类似的声明<?extends XXX>或者<? super XXX>,XXX代表一个类或接口.这到底是什么意思呢?今天看了些书有了一点儿体会,不知恰当与否,忘讨论之. 首先需要清楚一个事实,在java中上转型是安全的,下转型是不安全的.例如:String类是Object类的子类,我们可以将String强转为Object但是却不能将Object类强转为一个String,这很明显,因为在String类中包含了Object类没有的方法: 再来看一个事实