黑马程序员_Java基础11

------- android培训java培训、期待与您交流! ----------

Introspector类
内省操作:对类的内部属性进行读写操作
使用反射的方式,根据字段的名称,调用对应的setter、getter方法对字段值进行读写操作
IntroSector类的常用方法:
getBeanInfo() 获取BeanInfo对象,此对象拥有Bean的信息

对Javabean操作的扩展工具包:BeanUtils
对JavaBean的操作(setter、getter)
方法的参数可以以字符串的形式传递,方便使用。
而PropertyUtils则以参数原有的类型进行传递和操作JavaBean。

Annotation 注解 - 标记
包、类、成员属性、方法、局部变量
@SupressWarnnings("类名") 告诉编译器抑制警告信息
@Deprecated 将被标识的方法标注为已过时
@Override 标识为覆盖的方法
重写equals方法:equals(Object obj)参数类型应为Object,否则,不能覆盖Object的equals方法,为了保证成功覆盖,可在覆盖的方法上标识此注解@Override

深入注解:注解的定义与反射调用

//定义一个注解类 
@interface A {}

//注解类的应用 
@A
class B {}

//通过反射操作注解类
class C {
    B.class.isAnnotationPresent(A.class);
    A a = B.class.getAnnotation(A.class);
}

@Retendtion(RetentionPolicy. RUNTIME

为注解增加属性

属性的赋值:
名为value的属性,在使用时可省略名称
有两个属性以上,则不可省略

数组类型的属性:如果数组只有一个值,可省略大括号。
枚举类型的属性: 

Enum RetentionPolicy
Enum Constant Summary

@Target(ElementType.XXx)

Generic - 泛型
不使用泛型的集合时,存取元素的不变之处:
1.从集合中取元素,要进行转换
2.当对集合中的元素类型不确定时,取出转换时,可能会引起转换错误 
去类型化】 当源码中的集合对象定义了泛型,在代码被编译之后,集合对象的类型信息会被去掉,使程序运行效率不受影响。
通俗理解:泛型是给编译器看的。
所以,在运行期,可以使用反射,对集合进行添加其他类型数据的操作。
ArrayList<E>中的E称为类型变量或类型参数
参数化类型与原始类型的兼容性
参数化类型不考虑类型参数的继承关系,也就是说,定义了什么泛型,就只能装什么类型的参数,父类类型不也不能装 子类类型的参数。
<?>通配符表示任意类型

泛型中 ? 通配符的扩展
限定通配符的下边界:
Vector< ? extends Number> :指定的泛型类型可以是Number类及其子类
限定通配符的上边界:
Vector<? super String> :指定的泛型类型可以是String类及其父类

Map.Entry<K,V>类 K-V组合体
此类是Map的子类,因获取Map中的元素时,只能直接转换成Set的元素,原有的K-V无法保存;
而Map.Entry正是解决此问题的中间者,他可以以K-V组合的形式存于Set中,保持Map元素的特性。
HashMap<String, Integer> maps =  new HashMap<String, Integer>();
maps.put("zxy", 134);
maps.put("abc", 344);
maps.put("fdb", 555);
Set<Map.Entry<String, Integer>> entrySet =  maps.entrySet();
for(Map.Entry<String, Integer> entry : entrySet ) {
    System.out.println(entry.getKey() + "::" + entry.getValue());
}

自定义泛型
在方法中使用泛型,返回值之前用<T>表示任意新的类型
public <T> void add(T t){...}
在类上使用泛型:
class SomeClass<E> { ...}
定义泛型类型:在定义类的时候,在类名后加上<T>,表示定义了一个任意类型T
* 静态方法不能使用类定义的泛型类型,如果需要使用,则自己定义在返回类型前。
public static <T> void add(T t){...}
扩展应用:通过反射获得泛型的实际参数类型
通过集合变量无法直接获取集合变量的泛型类型,但是可以通过以此集合变量为参数的方法来获取变量的泛型类型。
比如:已知以变量为参数的某方法名称“applyVector(Vector v)"
Method applyMethod = GenericTest.class.getMethod("applyVector",Vector.class);
Type[] types = applyMethd.getGenericParameterTypes();
ParameterizedType pType = (ParameterizedType)types[0];
System.out.println(pType.getRawType());
System.out.println(pType.getActualTypeArguments()[0]);

------- android培训java培训、期待与您交流! ----------

详情请查看:http://edu.csdn.net/heima

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值