2.4 The Get and Put Principle

Get and Put Principle:
用于取对象的泛型集合,声明为 <? extends T>
用于存对象的泛型集合,声明为 <? super T>
如果同时存取,那么还是老老实实的用< T>吧

注意:

void put(List<? extends Number> nums){
nums.add(?)
}

上面代码中'?'处只能放入null值,因为你并不能确定nums具体是什么类型的List,可能是List< Integer> 也可能是List< Double>等,而它们共有的add方法一个是add(Integer i) 另一个是add(Double d),因此只能放入null

`List<? extends T>`实际使用中,只能是一种类型的集合,而不是说这个集合中的对象类型从`?`到 `T`,这里要好好理解这句话。

2.5 Arrays

看如下代码:

package java_generics_collections.chap2;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; /**
* Created by jintaox on 2016/3/9.
*/
public class Test_2_5 {
@Test
public void test01() {
Integer[] ints = new Integer[]{1, 2, 3};
Number[] nums = ints;
nums[2] = 2.3;//runtime error :java.lang.ArrayStoreException: java.lang.Double
} @Test
public void test_02() throws Exception {
List<Integer> ints = new ArrayList<>();
// List<Number> nums = ints;// compile error
}
}

java中规定,数组是协变的,即如果S是T的字累型,那么S[]是可以替换T[]的,即在任何需要T[]的地方传入s[]是没问题的。

但是泛型不是协变的,前面也说了List< S> 不能替换List< T>。java通过<? extends T>实现协变。

同时,java通过<? super T> 实现逆变(其实,协变逆变从前面阅读到这里应该也明白了),而数组是不支持逆变的。也即,java没有提供对泛型数组的支持。

泛型泛型,就是个泛指,就是让你忽略具体类型的,对这些对象做一系列操作。因此,泛型也就是更高的一种抽象层次,唉,随便说说,也许理解透彻了,别人也就更容易理解了。

Java Generics and Collections-2.4-2.5的更多相关文章

  1. python 中的sort 和java中的Collections.sort()函数的使用

    x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...

  2. Java Concurrency - Concurrent Collections

    Data structures are a basic element in programming. Almost every program uses one or more types of d ...

  3. thinking in java Generics Latent typing

    The beginning of this chapter introduced the idea of writing code that can be applied as generally a ...

  4. Thinking in java——Generics

    ​Ordinary classes and methods work with specific types: either primitives or class types. If you are ...

  5. 【Java】Java中的Collections类——Java中升级版的数据结构【转】

    一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数 ...

  6. Java中的Collections类

    转载:https://blog.csdn.net/yangxingpa/article/details/80515963 从[Java]Java中的Collections类——Java中升级版的数据结 ...

  7. Java Generics and Collections-2.3

    2.3 Wildcards with super 这里就直接拿书上的例子好了,这是Collections里面的一个方法: public static <T> void copy(List& ...

  8. Java Generics and Collections-8.1

    8.1 Take Care when Calling Legacy Code 通常,泛型都是在编译时检查的,而不是运行时.便意识检查可以提早通知错误,而不至于到运行时才出问题. 但有时后编译时检查不一 ...

  9. java List 排序 Collections.sort() 对 List 排序

    class User { String name; String age;  public User(String name,String age){  this.name=name;  this.a ...

  10. 黑马程序员——JAVA基础之Collections和Arrays,数组集合的转换

    ------- android培训.java培训.期待与您交流! ---------- 集合框架的工具类:        Collections : 集合框架的工具类.里面定义的都是静态方法. Col ...

随机推荐

  1. 5.如何使主机和虚拟机IP处于同一网段(内网渗透专用)

    先说一下正常流程: 1.打开虚拟机网络设置选项,选择桥接模式(Bridged)[如果是Kali 2.0的话,执行第一步后就OK了(90%)] 2.打开Kali里面的网络设置 3.设置一个ip4或者ip ...

  2. SQL Server 批量完整备份

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 实现方式一(One) 实现方式二(Two) 实现方式三(Thr ...

  3. Function Set in OPEN CASCADE

    Function Set in OPEN CASCADE eryar@163.com Abstract. The common math algorithms library provides a C ...

  4. Oracle使用SQL传输表空间

    源环境:RHEL 6.4 + Oracle 11.2.0.4 目的环境:RHEL 6.4 + Oracle 11.2.0.4 DG双机 要求:使用SQL传输表空间DBS_D_JINGYU从源环境到目的 ...

  5. SQL Tuning 基础概述06 - 表的关联方式:Nested Loops Join,Merge Sort Join & Hash Join

    nested loops join(嵌套循环)   驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_n ...

  6. 工作中遇到的一个多线程下导致RCW无法释放的问题

    最近有个同事在调用一个类库中的方法时遇到了一个问题,异常信息如下: 尝试释放正在使用的RCW,活动线程或其他线程上正在使用该 RCW,释放正在使用的 RCW 的尝试会导致损坏或数据丢失. 该方法中对w ...

  7. 第三篇:Entity Framework CodeFirst & Model 映射 续篇 EntityFramework Power Tools 工具使用

    上一篇 第二篇:Entity Framework CodeFirst & Model 映射 主要介绍以Fluent API来实作EntityFramework CodeFirst,得到了大家一 ...

  8. MyBatis通过JDBC生成的执行语句问题

    我们编程的过程中大部分使用了很出色的ORM框架,例如:MyBatis,Hibernate,SpringJDBC,但是这些都离不开数据驱动JDBC的支持.虽然使用起来很方便,但是碰到一些问题确实很棘手, ...

  9. 笔记:xubuntu下如何让系统默认使用nvidia显卡,而不是intel集显

    经反复折腾,得到如下的解决方法: prime-select nvidia 简单吧,但关系是如果让它开机自动执行一次. 反复折腾了xinitrc ,~/.xinitrc , /etc/rc.local ...

  10. JAVA JSP笔记

    一.jsp加载项目中资源图片 如果直接将静态页面写的代码copy到jsp中,你会发现图片都无法加载. 获取代码: String path = request.getContextPath(); Str ...