泛型:由于类型转换的错误,Java虚拟机在编译时不会报错,而在运行时报异常,所以安全隐患非常明显,在集合类中添加对象的时候,就不用抢转。
反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
package com.one.test;
import java.lang.reflect.Method;
public class FanDemo {
public static void main(String[] args) {
Bh<Wj> hh=new Bh<Wj>(new Wj());
hh.lxmc();
}
}
class Wj{
public void wan(){
System.out.println("Playing");
}
public int jiafa(int a,int b){
return a+b;
}
}
class Bh<L>{
private L l;
Bh(L l){
this.l=l;
}
public void lxmc(){
System.out.println("Type is:"+l.getClass().getName());
Method [] a=l.getClass().getDeclaredMethods();
for(Method me:a){
System.out.println("Method is:"+me.getName());
}
}
}
PS:
List是接口,ArrayList是JDK里提供的一个实现类。
List<String> list = new ArrayList<String>();
编译时类型是List,运行时类型是ArrayList,而List接口的实现类不只有ArrayList一个,用一个List类型的引用这是“面向接口编程”,好处有很多,提但是尽量面向接口编程,这里只说一个这样写的好处:
以后我们会用到很多不是我们写的类,我们叫第三方类库,在类库里面很可能会返回一个这样的列表,但是他未必会返给你一个ArrayList,没准是人家自己写的一个实现类都说不准,那么我们面向接口编程,不需要了解是什么实现类,我们都把它们当List接收过来就好了,我们就当成List来用。提高程序的透明性,让底层的实现对上层使用者封装。