泛型

java--泛型

試著忘記壹切 提交于 2019-12-11 13:27:53
转:https://segmentfault.com/a/1190000014120746 一、什么是泛型? Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常。泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。 二、为什么需要泛型 早期Java是使用Object来代表任意类型的,但是向下转型有强转的问题,这样程序就不太安全 首先,我们来试想一下:没有泛型,集合会怎么样 Collection、Map集合对元素的类型是没有任何限制的。本来我的Collection集合装载的是全部的Dog对象,但是外边把Cat对象存储到集合中,是没有任何语法错误的。 把对象扔进集合中,集合是不知道元素的类型是什么的,仅仅知道是Object。因此在get()的时候,返回的是Object

泛型的简单了解

蓝咒 提交于 2019-12-11 10:05:47
目录 定义 泛型的优点 泛型的格式 泛型的分类 泛型类 泛型接口 泛型方法 泛型的特点 泛型中通配符的使用详解 定义 Java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 注:参数化类型。数据类型不同,数据类型的位置是变量,随着变量值的不同,数据类型也不同。 泛型的优点 提高了代码的复用性 将运行期的类型转换异常,转变成编译期的检测,减少了异常的发生 避免了向下转型。 泛型的格式 <标识符> 标识符 一般都是使用一个大写英文字母,这个字母一般使用E K V T 来进行表示 ,其中 E element 元素, K Key 键, V value 值,T type 类 ,但是这些字母只是表示字母含义,没有实际意义。只是大家一般这么使用 泛型的分类 泛型类 声明格式 class 类名<泛型,泛型,泛型>{      语句体; } 代码实现 class A < T , M > { //多个泛型之间使用,隔开 public void fun ( T a , M b ) { } } 泛型接口 声明格式 interface A{     语句体; } 泛型接口的两种实现形式 泛型具体,子类可以不带泛型 interface A <

015_集合框架

假装没事ソ 提交于 2019-12-11 08:40:27
集合 由数组引入,和数组进行对比分析 概念:对象的容器,存储对象的对象,克代替数组 数组本身也是对象,可以存对象,集合也可以,因此是一种对数组的替代。 特点:容器的工具类,定义了对多个对象进行操作的常用方法。 集合比数组功能更强大,指的是封装了很多操作对象的方法,因此可以作为一个工具使用。 位置:java.util.* 包下 总结:集合是什么?集合是对象的容器,同时集合也是我们对数据操作时的工具! 集合基础 集合的体系 Collection父接口 Collection的抽象方法,是所有子接口以及实现类共性的方法,具有最大的普遍性 List集合 list子接口的特点与特有方法 通过查看源码的形式,验证说明list底层是数组实现的形式,进而结合数组特点掌握其方法 --------------------------——————————————————————----------------------- List作为Collection的子接口,有三个实现类 ArrayList:主要实现类。语法结构: ArrayList list = new ArrayList(); 特点:①数组结构实现,查询快,增删慢(增删一个元素,后面的元素都要移动位置) ②JDK1.2版本,运行效率块、效率不安全(对比另一个实现类Vector的add方法讲解) Vector: 特点:①数据结构实现,查询快

Java基础之泛型&反射

落爺英雄遲暮 提交于 2019-12-11 05:45:46
a.泛型 含义: 是JDK1.5的新特性,本质是 参数化类型 ,即所操作的数据类型被指定为一个参数,使用时通过传参来指定具体的类型。 好处:安全简单 。具体体现在提供编译时的强类型检查,而不用等到运行;可避免类类型强制转换;增强代码可读性。 //不使用泛型需要强制转换 List list = new ArrayList(); list.add("hello"); String s = (String) list.get(0) //使用泛型可避免强制转换 List<String> list = new ArrayList<String>(); list.add("hello"); String s = list.get(0); 以上例子也能看到在 集合类 使用泛型的情况很普遍,而且相比于数组具有动态的特点。 类型 :通过创建位置的不同,分可为 泛型类 :public class 类名<泛型类型1,…> 泛型方法 :public <泛型类型1,…> 返回类型 方法名(泛型类型1 参数名1,…) 泛型接口 :public interface 接口名<泛型类型1,…> 下面分别举例说明。 //泛型类:把泛型定义在类上 public class ObjectTool<T> { private T obj; public T getObj() { return obj; } public

反射Reflection

有些话、适合烂在心里 提交于 2019-12-10 23:11:38
反射Reflection 一、静态语言和动态语言 动态语言 是一类在运行时可以改变其结构的语言 :例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。 主要动态语言:Object-C、C#、JavaScript、PHP、Python等。 静态语言 与动态语言相对应的,运行时结构不可变的语言就是静态语言 :如Java、C、C++。 Java不是动态语言,但Java可以称之为“准动态语言” 。即Java有一定的动态性,我们可以 利用反射机制获得类似动态语言 的特性。Java的动态性让编程的时候更加灵活! 二、反射概述 1.Reflection(反射): 是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并 能直接操作任意对象的内部属性及方法 。 Class c = Class.forName(“java.lang.String”) 加载完类之后,在堆内存的方法区中就产生了一个 Class类型的对象(一个类只有一个Class对象) ,这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射 2.Java反射机制提供的功能 A

Java基础之泛型

女生的网名这么多〃 提交于 2019-12-10 21:19:56
泛型的意义 在JDK1.5 之前,所有集合框架中的对象都会被转成最上层的Object类型,取出时再强制转换成指定类型,这样做会导致代码臃肿,而且容易引起ClassCastException异常 来源: CSDN 作者: Dawn_爱小香猪 链接: https://blog.csdn.net/qq_36629741/article/details/103482574

20191210——Java集合、泛型和枚举

∥☆過路亽.° 提交于 2019-12-10 17:23:09
在 Java 中数组的长度是不可修改的。然而在实际应用的很多情况下,无法确定数据数量。这些数据不适合使用数组来保存,这时候就需要使用集合。 Java 的集合就像一个容器,用来存储 Java 类的对象。有些容器内部存放的东西在容器内部是不可操作的,像水瓶里的水,除了将其装入和倒出之外,就不能再进行别的操作了,但是很容易装入和倒出;而有些容器内部存放的东西在容器内部是可以操作的,例如,衣柜里面摆放的衣服,不仅可以将衣服存放到衣柜中,还可以将衣服有序地摆放,以便在使用时快速查找,但是却不容易取出。Java 的集合类比这些容器功能还多,其中有些是方便放入和取出的,有些是方便查找的。在集合中经常会用到泛型来使集合更加安全。 java集合类的概念 在编程时,可以使用数组来保存多个对象,但数组长度不可变化,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的,如果需要保存数量变化的数据,数组就有点无能为力了。而且数组无法保存具有映射关系的数据,如成绩表为语文一79,数学一80。这种数据看上去像两个数组,但这两个数组的元素之间有一定的关联关系。 为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),Java 提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。Java 所有的集合类都位于 java.util 包下

Java LIst 泛型强制转换

这一生的挚爱 提交于 2019-12-10 11:10:57
https://blog.csdn.net/wdj976291131/article/details/84952569 List<Object> listObect = new ArrayList<>(); listObect.add("a"); listObect.add("b"); List<String> listString = Arrays.asList(listObect.toArray(new String[listObect.size()])); 来源: CSDN 作者: dagecao 链接: https://blog.csdn.net/dagecao/article/details/103469670

C#程序编写高质量代码改善的157个建议【20-22】[泛型集合、选择集合、集合的安全]

≯℡__Kan透↙ 提交于 2019-12-10 08:41:10
建议20、使用泛型集合来替代非泛型集合 http://www.cnblogs.com/aehyok/p/3384637.html 这里有一篇文章,是我之前专门来介绍泛型的。我们应尽量的使用泛型集合。因为泛型的确有它的好处: 1、提供了类型安全,在编译期间就可以检查错误 2、更重要的是大部分情况下泛型集合的性能比非泛型集合的性能都高很多。 下面我们来看一段简单的测试性能的代码: class Program { static int collectionCount = 0; static Stopwatch watch = null; static int testCount = 10000000; static void TestBegin() { GC.Collect(); ////强制对所有代码进行即时垃圾回收 GC.WaitForPendingFinalizers();////挂起线程,执行终结器队列中的终结器(即析构方法) GC.Collect();///再次对所有代码进行垃圾回收,主要包括从终结器队列中出来的对象 collectionCount = GC.CollectionCount(0);///返回在0代中执行的垃圾回收次数 watch = new Stopwatch(); watch.Start(); } static void TestEnd() { watch