泛型

JavaSE基础知识学习—泛型

你。 提交于 2019-12-02 00:59:14
泛型 Java泛型是jdk1.5的一个新特性,jdk的性特性还包括:泛型,枚举,装箱和拆箱,可变参数等。这里先主要学习泛型。这些特性,现在都在广泛的使用。因为现在使用IDE编写代码,都是标准的代码提示,所以泛型也就变得理所应当,但还是应该学习记录一下。 泛型的声明 interface List和class 名称 说明:T只能是类,不能是基本数据类型 为什么要有这个新特性 public static void main(String[] args) { List list = new ArrayList(); list.add(12); list.add(23); list.add(45); list.add(65); list.add(new String("AA")); for(int i = 0 ; i < list.size(); i++){ int age = (Integer)list.get(i); System.out.println(age); } } 上述代码就是用一个集合存储年龄,如果不使用泛型的话就是任何元素就都可添加到集合中,导致类型不安全,其次在遍历的时候需要强转,如果不小心在Integer类型的集合中放入一个String类型的,那么在遍历就会出现一个类型转换异常。 1.为了解决元素存储的安全性问题 2.解决获取数据元素时,需要类型强转的问题,例如

【JavaSE_学习笔记】泛型

醉酒当歌 提交于 2019-12-02 00:57:58
【JavaSE_学习笔记】泛型 泛型格式: <引用类型>:泛型只能放引用类型 泛型的好处:   1.可以把运行时出现的问题提前至编译时   2.避免了无谓的强制类型转换   3.解决了黄色警告线的问题 问题:以下哪些写法是正确的? ArrayList < String > list = new ArrayList < String > (); true ArrayList < Object > list = new ArrayList < String > (); false ArrayList < String > list = new ArrayList < Object > (); false // 为了新老系统的兼用性 ArrayList list = new ArrayList < String > (); true ArrayList < String > list = new ArrayList(); true 注意:   1.泛型中没有多态的概念,左右两边的数据类型必须一致,或是直写一边的泛型    推荐:两边都写同样数据类型的泛型   2.泛型中是不能使用基本数据类型数据的,如需使用则要使用基本数据类型对应的包装类型(如:int——->Integer) 自定义泛型: 自定义泛型:可以理解为一个数据类型的变量或是一个数据类型的占位符 方法自定义泛型:

【JAVASE学习笔记之泛型】

Deadly 提交于 2019-12-02 00:57:36
泛型在集合中使用 泛型在集合中的使用 * 创建集合同时指定集合存储的数据类型 * 指定数据类型时,要么指定左边,要么两边都执行相同的数据类型 * 在JDK1.7之前,必须两边都要指定并且要相同的数据类型 * 在JDK1.7之后,指定左边即可 * 在泛型中没有多态的概念 泛型在集合中使用的好处 * 将运行时错误转换为编译期错误,增强了集合的安全性。 * 省去了数据类型强制转换的麻烦。 泛型的定义与使用: 泛型方法 泛型方法概述: 泛型的概述 * JDK1.5新特性。 * 泛型可以使用在方法上,类上,接口上。 * 泛型变量可以理解为是某种数据类型的占位符。 * 泛型变量还可以理解为是某种数据类型的变量。 * 泛型变量的命名规则:只要是合法的标识符就可以,一般使用一个大写字母表示 常用的泛型变量名有:T type E element K key V value 泛型方法的概念 * 在定义方法时定义了泛型变量的方法就是泛型方法 泛型方法的定义格式 * 修饰符 <T> 返回值类型 方法名(参数列表){} 泛型方法的注意事项 * 泛型变量的具体数据类型是由调用者调用方法时传参决定。 * 泛型变量的具体数据类型不能是基本数据类型,如果要使用基本数据类型则需要使用对应的包装类类型。 泛型类 泛型类的概念 * 在定义类的同时定义了泛型变量的类。 泛型类的定义格式 * class 类名<T>{ //

学习笔记之JavaSE(38)--泛型

爷,独闯天下 提交于 2019-12-02 00:56:05
今天学习的内容是泛型 一、泛型的意义 泛型意味着“ 类型安全 ”,它实现了 参数化类型 的概念。 实际上泛型就是将运行时可能发生的问题放到编译期解决 。比如:在泛型出现之前,任意类型的引用都可以存储进集合,并被向上转型为Object类型,取出的引用仍旧是Object类型,如果想要操作它就必须对其进行强制类型转换,这就存在了安全隐患!这是由于集合中可能存在不同类型的引用,强制转换就可能会发生ClassCastException。但如果使用泛型,编译器就知道集合中存储的一定是泛型类型或其子类/实现类的引用( 多态与泛型并不冲突 ),并被向上转型为泛型类型,取出的一定是该泛型类型的引用,这时候就不用再对其进行强制类型转换,解决了类型安全问题。其实这么做就相当于 将类型参数化 :此集合只存储此类型或其子类/实现类的引用,不接收其他类型的引用。程序示例: public class Test70 { @SuppressWarnings({ "rawtypes", "unchecked" }) public static void main(String[] args) { // 不使用泛型,会有安全隐患 ArrayList list_1 = new ArrayList(); list_1.add("a");// String类型的对象 list_1.add(1);// Integer类型的对象

JavaSE基础知识学习-----泛型

妖精的绣舞 提交于 2019-12-02 00:55:52
泛型 Java泛型是jdk1.5的一个新特性,jdk的性特性还包括:泛型,枚举,装箱和拆箱,可变参数等。这里先主要学习泛型。这些特性,现在都在广泛的使用。因为现在使用IDE编写代码,都是标准的代码提示,所以泛型也就变得理所应当,但还是应该学习记录一下。 泛型的声明 interface List<T>和class 名称<K,V>,其中T,K,V代表的是类型。例如 List<String> list = new ArrayList<String>(); Inerator<Customer> iterator = customers.iterator(); 说明:T只能是类,不能是基本数据类型 为什么要有这个新特性 public static void main(String[] args) { List list = new ArrayList(); list.add(12); list.add(23); list.add(45); list.add(65); list.add(new String("AA")); for(int i = 0 ; i < list.size(); i++){ int age = (Integer)list.get(i); System.out.println(age); } } 上述代码就是用一个集合存储年龄

JavaSE学习笔记--泛型

梦想的初衷 提交于 2019-12-02 00:55:38
泛型: 泛型是java jdk1.5出现的新特性之一。 泛型是给编译看的,当传入的实参类型不符时,会在编译期报错。而反射可以绕过编译器。 ArrayList<E>类定义和ArrayList<Integer>类引用中涉及如下术语: 整个ArrayList<E>称为泛型类型 ArrayList<E>中的E称为类型变量或类型参数 整个ArrayList<Integer>称为参数化的类型 ArrayList<Integer>中的Integer称为类型参数的实例或实际类型参数 ArrayList<Integer>中的<>念做typeof ArrayList称为原始类型 参数化类型与原始类型的兼容性: 如下面的两个都是可以的,但是编译时会出现一个警告。 Collection<String> c = new Vector(); Collection c = new Vctor<String>(); 参数化类型不考虑类型参数的继承关系: Collection<String> c = new Vector<Object>(); -->(错) Collection<Object> c = new Vector<String>(); -->(错) 在创建数组实例时,数组的元素不能使用参数化的类型,例如,下面语句有错误: Vector<Integer> vectorList[] = new Vector

java学习笔记——集合与泛型

三世轮回 提交于 2019-12-02 00:50:54
Collection系列集合 1. 数组的弊端: ①数组的长度不可变 ②数组中没有提供可以查看有效元素个数的办法 2. 集合的特点: ①集合的长度是可变的 ②集合可以添加任意类型的对象 ③集合中只能存对象 3.集合框架 java.util.Collection 接口: 是集合层次的根接口 |-- java.util.List 接口:有序的,允许重复的。因为 List 系列集合都具有索引值 |--java.util.ArrayList : 采用的数组结构存储元素。查询操作多时。 |--java.util.LinkedList : 采用的链表结构存储元素。增删操作多时选择。 |--java.util.Vector : 是一个古老的实现。线程安全,因此效率低 |-- java.util.Set 接口: 无序的,不允许重复的。 |--java.util.HashSet:是 Set 接口的典型实现类。 判断元素是否存在的依据是,先比较 hashCode 值,若 hashCode 值不存在 则直接存储,若 hashCode 值存在,再通过 equlas 比较两个对象的内容。 注意:重写 hashCode 和 equals 时二者需要保持一致! |--java.util.LinkedHashSet:是 HashSet 的子类,相较于 HashSet 多了链表维护元素的顺序。 增删效率低于

java泛型学习笔记

百般思念 提交于 2019-12-02 00:50:41
本文为从网上东拼西凑的java泛型学习笔记,摘出了我认为有价值的部分,尚未整理,先放在这里备份。 http://docs.oracle.com/javase/1.5.0/docs/guide/language/generics.html 泛型在类、接口和方法中定义,在实现(extends,implements)和实例化时使用。 定义类或接口时,使用"<E extends Fruit>"这种形式,之后就可以在类中对E进行操作。 定义方法所接收的参数时,使用"List<? extends Fruit>"这种形式,就可以接收这个范围的List做参数。 实例化时,不能使用问号这种形式来指定泛型——不能new List<? extends Apple>(); 继承或实现时,也不能使用问号这种形式来指定泛型——不能public interface MyList extends List<? extends Apple> 关于extends和super关键字的PECS(producer-extends, consumer-super)原则: 如果参数化类型表示一个T生产者,就使用<? extends T>,因为它只能get,用于将数据从生产者取出(只要生产者可以生产T的子类,那就一定可以生产T); 如果参数化类型表示一个T消费者,就使用<? super T>,因为它只能add

JavaSE基础学习笔记-提高篇-JDK1.5新特性-泛型

不想你离开。 提交于 2019-12-02 00:50:05
泛型是 JDK1.5 以后提供的一个重量级新特性,这对于 Java 来说有着革命性的意义,泛型的出现为 Java 的安全性又加上了一把大锁,泛型可以用于类,方法,变量,接口,具体的语法规则就不再敖述了,下午简单概括一个泛型类,泛型方法等的特点和使用泛型时的注意事项。 泛型,是提供给 javac 编译器使用的,目的是在编译期能够尽可能的找出程序可能出现的错误,所以泛型的一大特点就是擦除,即在运行时不会带有任何有关泛型的信息。 1. 因为泛型是在 JKD1.5 才出现而不是在 Java 诞生的时候就具备泛型特性,所以泛型的一大重要内容就是要向前兼容。 ①参数化类型的引用可以指向一个原始类型参数:如 Collection<String> c = new Vector(); ②原始类型引用可以指向一个参数化类型的对象:如 Collection c = new Vector<String>(); 2. 参数化类型不考虑类型参数的继承关系,被用作参数的类型具有唯一性 例如: Vector<String> v1 = new Vector<Object>(); Vector<Object> v2 = new Vector<String>(); 这两种定义方法都是错误的,比如第一个示例,引用声明时只能接受 String 类型的对象,而实际对象声明的是可以接受任何继承自 Object 的对象

#笔记#圣思园 JavaSE 第53讲——泛型详解(1)

假装没事ソ 提交于 2019-12-02 00:49:14
1.JDK1.5出现的新特性 泛型、增强的for循环、自动装箱;拆箱、类型安全的枚举、静态导入、可变参数 2.泛型Generics 引入泛型,将获得编译时类型的安全和运行时更小抛出ClassCastExceptions的可能 可以声明一个集合,来接收/返回 对象的类型 3.定义泛型 T T代表类型的信息 4.所谓泛型:就是变量类型的参数化 5.自定义泛型 6.定义泛型类型的数组 7.用泛型实现集合(SimpleCollection.java) 8.实现泛型的泛型 9.用泛型使用集合ArrayList 以前在帮助文档中忽略不计的尖括号就是泛型啦 10.用泛型使用集合HashSet(SetTest.java) 11.用泛型使用集合Map(MapTest.java) map有key和value,所以有两个泛型 来源: CSDN 作者: aliuxiaohuaxixi 链接: https://blog.csdn.net/aliuxiaohuaxixi/article/details/45932979