泛型

Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType

随声附和 提交于 2020-02-22 16:32:52
Java类型中ParameterizedType,GenericArrayType,TypeVariabl,WildcardType详解 和反射+泛型有关的接口类型 java.lang.reflect.Type:java语言中所有类型的公共父接口 java.lang.reflect.ParameterizedType java.lang.reflect.GenericArrayType java.lang.reflect.WildcardType 1. Type直接子接口 ParameterizedType,GenericArrayType,TypeVariable和WildcardType四种类型的接口 ParameterizedType: 表示一种参数化的类型,比如Collection GenericArrayType: 表示一种元素类型是参数化类型或者类型变量的数组类型 TypeVariable: 是各种类型变量的公共父接口 WildcardType: 代表一种通配符类型表达式,比如?, ? extends Number, ? super Integer【wildcard是一个单词:就是“通配符”】 2. Type直接实现子类 :Class类 3. java.lang.reflect.Type接口 Type所有类型指代的有: 原始类型 (raw types)【对应Class】

java之泛型

梦想与她 提交于 2020-02-22 15:15:29
泛型 1.泛型是jdk1.5出现的安全机制 2.优点 1)避免了强制类型转化引发的异常 2)限定了数据类型,保护了数据类型安全 3)将运行期间引发的异常转到了编译期间 3.什么时候使用泛型 1)当操作的引用类型不确定的时候就使用泛型 2)其中<>就是具体接收数据类型的代表,明确传入的具体引用类型 4.使用泛型执行的流程 在编译时通过<>可确保类型的安全,在运行时会将泛型移除,生成的class文件是不带泛型的,为了兼容运行时类的加载器 5.泛型类 1)定义和声明:在类名后面通过<>指定一个或多个类型参数,同时还可以对类型参数取值范围进行限制,多个类型之间使用逗号分割public class Person<T,E> 2)当实例化泛型类对象,指定泛型的类型,指定后对应的使用泛型的位置就已经确定为实例化中指定的类型 3)如果自定义了泛型类,但是在实例化的时候没有使用,那么默认为Object类型。 6.泛型方法 1)定义:在方法访问修饰符后面通过<>指定泛型方法的类型参数 2)泛型方法定义和所在的类是不是泛型类无关 7.泛型接口(了解) 8.通配符 1)? 2)? extends A(向下限定):可以是A或者A的子类 3)? super A(向上限定):可以是A或者父类 来源: CSDN 作者: achu19 链接: https://blog.csdn.net/achu19/article

Java泛型

本秂侑毒 提交于 2020-02-21 16:52:49
Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。 可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。 1 类型擦除 正确理解泛型概念的首要前提是理解类型擦除(type erasure)。 Java中的泛型基本上都是在编译器这个层次来实现的。 在生成的Java字节代码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译 器在编译的时候去掉。 这个过程就称为类型擦除。如在代码中定义的List<Object>和List<String>等类型,在 编译之后都会变成List。 JVM看到的只是List,而由泛型附加的类型信息对JVM来说是不可见的。Java编译器会在编译时尽可能的发现可能出错的 地方,但是仍然无法避免在运行时刻出现类型转换异常的情况。 类型擦除也是Java的泛型实现方式与 C++模板机制 实现方式之间的重要区别。 很多泛型的奇怪特性都与这个类型擦除的存在有关,包括: 泛型类并没有自己独有的Class类对象。比如并不存在List<String>.class或是List<Integer>

Java泛型应用

两盒软妹~` 提交于 2020-02-21 11:31:45
泛型类 package com . generic_class ; //对比不使用泛型 //class Generic{ // private String val; // // public void setVal(String val){ // this.val = val; // } // public String getVal(){ // return val; // } //} /** * 自定义泛型类案例 * @param <T> */ public class GenericDemo < T > { /*声明泛型类*/ private T val ; /*成员变量valde*/ public void setVal ( T val ) { this . val = val ; } // public <T> T getVal(T val) { //返回值为泛型形参T的成员方法*//* // return val; // } public T getVal ( ) { / * 返回值为泛型形参T的成员方法 * / return val ; } public static void main ( String [ ] args ) { //创建泛型类对象时传入具体实际类型 GenericDemo < String > demo = new GenericDemo <

Java反射操作泛型

不打扰是莪最后的温柔 提交于 2020-02-21 09:41:36
泛型: Java 中的泛型仅仅是给编译器 javac 使用的,确保数据的 安全性和免去强制类型转换的麻烦,但是一旦编译完成,所 有与泛型有关的类型全部擦除。 使用泛型直接读取泛型,是读取不到的,因为反射是操作 加载以后的类的。 Java 新增的数据类型: 为了通过反射操作这些类型以迎合实际开发的需要 1) ParameterizedType : 表 示 一 种 参 数 化 的 类 型 , 比 如Collection<String>,可以获取 String 信息 2) GenericArrayType :泛型数组类型 3) TypeVariable :各种类型变量的公共父接口 4) WildcardType :代表一种通配符类型表达式, 比如? extends Number,? super Integer (Wildcard 是一个单词,就是通配符 ) 来源: CSDN 作者: 赵广陆 链接: https://blog.csdn.net/ZGL_cyy/article/details/104406261

Java各种类

风格不统一 提交于 2020-02-21 03:03:58
1.Object类   equals方法 2.Date类   构造方法   成员方法     DateFormat类     Calendar类 3.System类   StringBuilder原理   构造方法   toString方法 4.包装类   装箱&拆箱   自动装箱&自动拆箱   基本类型和字符串类型的 转换 5.Collection类   集合框架介绍   Iterator接口   迭代器   foreach=增强for循环 6.泛型   有关泛型的类   方法   接口   泛型通配符 7.数据结构:栈,队列,数组,链表,红黑树 8.List集合   ArrayList集合   LinkedList集合   Vector集合   HashSet集合     Hash值       HashSet存储数据结构       HashSet存储自定义类型元素   Set集合   LinkedHashSet集合 9.Collections集合工具类方法 10.Map集合    子类   方法     遍历     Entry键值对对象   P271 来源: https://www.cnblogs.com/only666/p/12337796.html

.NET知识梳理——1.泛型Generic

六眼飞鱼酱① 提交于 2020-02-20 14:02:46
1. 泛型Generic 1.1 引入泛型:延迟声明 泛型方法声明时,并未写死类型,在调用的时候再指定类型。 延迟声明:推迟一切可以推迟的。 1.2 如何声明和使用泛型 泛型方法:方法名称后面加上尖括号,里面是类型参数 类型参数实际上就是一个类型T声明,方法就可以用这个类型T了。 如下所示: public static void Show<T>(T t) { Console.WriteLine($"This is {typeof(CustomMethod)},paramater={t.GetType().Name},value={t}"); } 1.3 泛型的好处和原理 泛型方法性能跟普通方法一致,泛型声明方法时,并未写死类型,T是什么类型,只有在调用的时候才知道,一个方法能满足不同类型。 1.4 泛型类、泛型方法、泛型接口、泛型委托 1.4.1 泛型类型 一个类满足不同类型的需求 具体如下: public class BaseModel { public int Id { get; set; } } public class GenericClass<T> where T:BaseModel//为泛型基类约束 { } 1.4.2 泛型方法 一个方法满足不同类型的需求 具体如下: public static void Show<T>(T t) { Console.WriteLine

java泛型(整理)

放肆的年华 提交于 2020-02-18 09:24:21
1 泛型基础知识 泛型需要理解两个关键点:1)类型擦除 2)类型转换 1)类型擦除 泛型有个很重要的概念,是类型擦除。正确理解泛型概念的首要前提是理解类型擦除(type erasure)。 Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节代码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。这个过程就称为类型擦除。如在代码中定义的List<Object>和List<String>等类型,在编译之后都会变成List。JVM看到的只是List,而由泛型附加的类型信息对JVM来说是不可见的。Java编译器会在编译时尽可能的发现可能出错的地方,但是仍然无法避免在运行时刻出现类型转换异常的情况。类型擦除也是Java的泛型实现方式与 C++模板机制 实现方式之间的重要区别。 很多泛型的奇怪特性都与这个类型擦除的存在有关,包括: a) 泛型类并没有自己独有的Class类对象。比如并不存在List<String>.class或是List<Integer>.class,而只有List.class。 b) 静态变量是被泛型类的所有实例所共享的。对于声明为MyClass<T>的类,访问其中的静态变量的方法仍然是 MyClass.myStaticVar。不管是通过new MyClass<String>还是new MyClass<Integer

【翻译】C#编程语言和JAVA编程语言的比较(上)

僤鯓⒐⒋嵵緔 提交于 2020-02-17 15:56:34
原文地址: http://www.25hoursaday.com/CsharpVsJava.html 简介 C#语言是一门面向对象的语言,开发者可以使用C#和微软.NET平台快速构建各种应用程序。C#和.NET平台的目标是把开发者从一些诸如内存管理、类型安全问题、底层类库、数组边界检查等等的底层问题中解放出来并节约大量的时间,这样开发者就可以真正把时间和精力放在他们的应用程序和业务逻辑上。对于Java开发者来说,把前面那句话的开头改为“Java语言和平台”,这句话也同样可以总结Java语言和平台。 后面的内容介绍了C#和Java编程语言的异同,这些都是基于我使用两个语言的经历。所有代码都经过微软.NET框架2.0以及Java SE 6的测试。 注意:作者有些代码不符合.NET 3.5或JAVA SE 7(或以上)版本的最佳实践写法并且也不能覆盖它们所提供的新语法和新特性,但不影响本文的重点也就是平台的比较。 第一部分:C#和JAVA基本一致的地方 1、我们都是Object C#的类层次中有一个根,也就是所有C#的类都是System.Object的子类,Java也是这样,所有类都是java.lang.Object的子类。两个语言的Object类的方法有些相同(比如System.Object的ToString()和java.lang.Object的toString()),也有一些不同