1.部分反射API是泛型 1.1获取反射API的泛型 部分反射API是泛型,如Class<T>是泛型 //如果使用Class,不带泛型,出现compile warning编译警告 Class clazz1 = String.class; String str1 = (String) clazz1.newInstance(); //改写为带泛型的Class,如Class<T>是泛型, Class<String> clazz2 = String.class; String…
1.擦拭法是Java泛型的实现方式. 编译器把类型视为Object. * 泛型代码编译的时候,编译器实际上把所有的泛型类型T统一视为Object类型.换句话说,虚拟机对泛型一无所知,所有的工作都是编译器做的. 编译器根据实现安全的强制转型. * Java的范型实际是有Java在编译时进行的.编译器内容永远把T视为Object处理,只是在需要转型的时候,根据T的类型实行安全的强制转型. 2.java的泛型是由擦拭法实现的,因此有一些局限: 2.1.不能是基本类型,例如int 编译器把T视为Obje…
1.处理注解 注解本身对对代码逻辑没有任何影响 SOURCE类型的注解在编译期就被丢掉了 CLASS类型的注解仅保存在class文件中 RUNTIME类型的注解在运行期可以被读取 如何使用注解由工具决定 因此如何处理注解只针对RUNTIME类型的注解 如何读取RUNTIME类型的注解 思路: Annotation也是class 所有Annotation继承自java.lang.annotation.Annotation 使用反射API,就可以获取 2.使用反射API读取Annotation Re…
2.字段Field 2.1.通过Class实例获取字段field信息: getField(name): 获取某个public的field,包括父类 getDeclaredField(name): 获取当前类的某个field,不包括父类 getFields(): 获取所有public的field,包括父类 getDeclaredFields(): 获取当前类的所有field,不包括父类 Hello.java package com.reflection; import java.util.Arra…
1.Class类与反射定义 Class类本身是一种数据类型(Type),class/interface的数据类型是Class,JVM为每个加载的class创建了唯一的Class实例. Class实例包含该class的所有信息,通过Class实例获取class的信息的方法称为反射(Reflection) Java除基本类型外,其他都是class(包括interface).如String.Object.Runnable.Exception... class(包括interface)的本质是数据类型.…
1.super通配符 1.1super通配符第一种用法 泛型的继承关系 Pair<Integer>不是Pair<Number>的子类,如 static void set(Pair<Integer> p, Integer first, Integer last){...} set()不接受Pair<Number> 使用<? super Integer>使方法接收所有泛型类型为Integer或Integer超类的Pair类 package com.t…
1.泛型的继承关系: Pair<Integer>不是Pair<Number>的子类 add()不接受Pair<Integer> Pair.java package com.testArray; public class Pair<T> { private T first; private T last; public Pair(T first,T last){ this.first = first; this.last = last; } public vo…
编写泛型类比普通的类要麻烦,而且很少编写泛型类. 1.编写一个泛型类: 按照某种类型(例如String)编写类 标记所有的特定类型例如String 把特定类型替换为T,并申明 Pair.java package com.testArray; public class Pair<T> { private T fisrt; private T last; public Pair(T first,T last){ this.fisrt=first; this.last=last; } public…
1.为什么需要泛型? JDK提供了ArrayList,可以看作"可变长度"的数组: 比数组使用方便 示例1:如果使用ArrayList存储String类型: 需要强制转型 不方便,易出错 //演示代码 public class ArrayList1{ private Object[] array; public void add(Object e){...} public void remove(int index){...} public Object get(int index){…
1.定义注解 使用@interface定义注解Annotation 注解的参数类似无参数方法 可以设定一个默认值(推荐) 把最常用的参数命名为value(推荐) 2.元注解 2.1Target使用方式 使用@Target定义Annotation可以被应用于源码的那些位置 类或接口:ElementType.TYPE 字段:ElementType.FIELD 方法:ElementType.METHOD 构造方法:ElementType.CONSTRUCTOR 方法参数:ElementType.PAR…