随笔分类 - Java-thinkinjava
摘要:自限定 自限定将强制泛型当做自己的边界参数来使用。自限定所做的,就是要求在继承关系中,像下面这样使用这个类: class A extends SelfBounded<A> {} 它的意义是可以保证类型参数必须与正在被定义的类相同。自限定只能强制作用于继承关系。如果使用自限定,就应该了解这个类所用的类
阅读全文
摘要:无界通配符<?>很容易和原生类型混淆。 以List为例: List表示持有任何Object类型的原生List,其实就等价于List<Object> List<?>表示某种具有特定类型的非原生List(同构集合),只是我们不知道它的具体类型是什么,所以我们就不允许往里set数据 看下面例子: 捕获转换
阅读全文
摘要:(1) <T extends A> 因为擦除移除了类型信息,而无界的泛型参数调用的方法只等同于Object。但是我们可以限定这个泛型参数为某个类型A的子集,这样泛型参数声明的引用就可以用类型A的方法了,语法为<T extends A>。下面是一个例子: (2) <? extends T> / <?
阅读全文
摘要:先看一个例子: 虽然泛型类的参数不同,但是结果却是TRUE。这是因为在泛型代码内部,无法获得任何有关泛型参数类型的信息。 Java泛型是通过擦除来实现的。这意味着当你在使用泛型时,任何具体的类型信息都被擦除了,你唯一知道的是你在使用一个对象。因此List<String>和List<Integer>在
阅读全文
摘要:泛型同样也可以使用在匿名内部类中。 下面的例子是对 Java泛型(3):泛型方法 中例(2)的修改。
阅读全文
摘要:泛型还可以同样运用在方法。是否拥有泛型方法与其所在的类是否是泛型类没有关系。 无论何时,只要你能做到,都应该尽量使用泛型方法,如果泛型方法可以取代将整个类整个类泛型化,那么就应该只使用泛型方法。 下面是几个泛型方法的例子。 (1) 利用泛型方法和可变参数列表为List添加元素 (2) 一个更通用的对
阅读全文
摘要:泛型不仅可以在类上实现,也可以在接口上实现。JDK中[Iterable<T> <-- Collection<E> <-- List<E>/Queue<E>/Set<E>]都是泛型接口。 下面是一个泛型接口的例子。这是一个一个生成器的例子。生成器用来专门创建对象。这是工厂方法设计模式的一种应用。一般来
阅读全文
摘要:通常而言,我们使用一种容器来存储一种类型的对象。而泛型的主要目的之一就是用来指定这个容器要持有什么类型的对象。因此,与其使用Object,我们可以暂时不指定类型。 看下面3个例子: (1) 我们有时候想调用一个方法返回多个返回值,但是又不想单独再创建一个类。我们可以将一组对象直接打包放在一个元组中。
阅读全文

浙公网安备 33010602011771号