转自:http://peiquan.blog.51cto.com/7518552/1303768本以为这会是一篇比较基础的博客,可一旦深究的时候,才发现很多有意思的东西,也发现了很多令人迷惑的地方。通配符是一个有趣的东西,如果你掌握了,会使你的代码更为通用(健壮性更强)。首先本文是在建立在java泛型基础之上的,如果你对泛型并不了解,可以点击 这里。同时为了对通配符的了解更为透切,定义如下几个类。public class Animal {private String name;public An...
泛型的由来为什么需要泛型??Java的数据类型一般都是在定义时就需要确定,这种强制的好处就是类型安全,不会出现像弄一个ClassCastException的数据给jvm,数据安全那么执行的class就会很稳定。但是假如说我不知道这个参数要传什么类型的,因为公司需求在变,如果写死的那就只能便以此需求就改一次,很麻烦。sun公司也注意到这个问题,这样会让代码的灵活性降低,他们就研究出了泛型。泛型初识??什么是泛型,可以字面理解就是一个泛泛...
泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。 可以在集合框架(Collection framework)中看到泛型的动机。例如,Map类允许您向一个Map添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如String)的对象。 因为Map.ge...
前言Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型带来的好处在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转...
前言Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型带来的好处在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转...
本文来源:https://i.cnblogs.com/EditPosts.aspx?opt=1感谢博主。本文仅供参考学习。 Java 泛型关键字说明? 通配符类型<? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类<? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Objectextends 示例static class Food{}
static class Fruit extends Food{}
static class Apple extends Fruit{}
static class Re...
一.通配符上限和通配符下限接受的类型 通配符上限:<? extends T> 通配符下限:<? super T> 以下代码是测试结果,注释为解释说明 1package xayd.hjj;2 3import java.util.ArrayList;4import java.util.List;5 6class A{}7class B extends A implements F{}8class C extends A{}9class D extends A{}
10class E{}
11interface F{}
1213publicclass Test{
1415publicstaticvoid main(String[] args) {
1617//下面五...
对于上一阵子,看视频学习的泛型<>中有?,是没有印象了。 就是没有敲代码的缘由吧。 总结下,学习到的知识。 泛型通配符不常用,在看到代码要求明白是什么意思。 泛型的通配符?(只能用于方法的参数) 还有另一个知识点,泛型中<>,如果是object的话,这样<object>。是没有继承关系的。(泛型中没有继承关系)不是说,<object>类型的泛型,就可以占位任意类型了,会报错的。原文:https://www.cnblogs.com/158-186...
原文:https://juejin.im/post/5d5789d26fb9a06ad0056bd9
前言
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
泛型带来的好处
在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要...
之前对Java的泛型不太熟悉,没怎么搞明白通配符 ? 的使用,以及 ? 与 T 的区别,导致一直懵懵懂懂,也不太敢用。网上找了一大堆解释文章,都没有怎么讲清晰,最后发现是Java官方的教程《Lesson: Generics》,把泛型和通配符的问题讲得非常清楚。List<T> , 这个 T 是一个形参,可以理解为一个占位符,被使用时,会在程序运行的时候替换成具体的类型,比如替换成String,Integer之类的。List<?>, 这个 ? 是一个实参,这是Java定义...
? extends Type 表示Type的子类型(subtypes),Type也包含在内,被称为上界(upper bound) ? super Type表示Type的父类型(supertypes),Type也包含在内,被称为下界(lower bound)
有界的通配符相较于无界的,可以携带更多的信息.public static <T> void copy (List<? super T> dest, List<? extends T> src) {for (int i=0; i<src.size(); i++)dest.set(i,src.get(i));}为什么需要有界通配符?
public static <T> void copy(List<T>dest,Li...
?通配符是表示所有类型,但是有些情况我们需要表示部分类型,特别是要表示一些有依赖关系的类型,就需要指定边界.
? exteds SuperType 中SuperType就是上界,表示该类是上界的子类 ? super SubType 中SubType就是下界,表示该类型是下界的父类
注意通配符(wildcard)只能有一个边界
参考: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.html#What%20is%20a%20wildcard%20bound?
除了基础类型,都可以做为通配符的边界
List<? extends String >
List<? extends Comparable >
List<? extends int[] >
List<? extends Comparable<? super Long> >
List<? extends Class<? extends Number> >
List<? extends Enum<?> > 参考: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.html#Which%20types%20are%20permitted%20as%20wildcard%20bounds?
对于上一阵子,看视频学习的泛型<>中有?,是没有印象了。就是没有敲代码的缘由吧。总结下,学习到的知识。泛型通配符不常用,在看到代码要求明白是什么意思。泛型的通配符?(只能用于方法的参数)还有另一个知识点,泛型中<>,如果是object的话,这样<object>。是没有继承关系的。(泛型中没有继承关系)不是说,<object>类型的泛型,就可以占位任意类型了,会报错的。
https://blog.csdn.net/qq_41622739/article/details/91307264
1. <? extends Hero>
ArrayList heroList<? extends Hero> 表示这是一个Hero泛型或者其子类泛型heroList 的泛型可能是HeroheroList 的泛型可能是APHeroheroList 的泛型可能是ADHero所以 可以确凿的是,从heroList取出来的对象,一定是可以转型成Hero的
但是,不能往里面放东西,因为放APHero就不满足<ADHero>放ADHero又不满足<APHero>
2. <? super Hero>
ArrayList he...