java 泛型和反射

和c++相比,java的泛型对类型限制更严格

对于 :

static boolean <T> compare(T left,T right)

{

    return left.compare(right) > 0;

}

对于c++来说,只要T实现了compare即可以编译过,但是对java,必须显示的表示T有compare接口,因此上面的代码编译不过,需要如下模式

static boolean <T extends comparable> compare(T left,T right)

{

    return left.compare(right) > 0;

}

泛型的应用限制:

1 不能用基本数据类型实例化类型参数(所有的T都必须是Object的子类)

2运行时查询只要Pair<String>和Pair<Integer>是相同的类型(T被统一转成Object)

3不能抛出泛型类型的异常

4不能new一个泛型类型的数组(object无法检测具体是哪种类型)

反射则是通过Class来实现:

对于任何实例化的对象,我们都可以通过getClass获取它的Class cl

cl可以直接调用newInstance(),相当于调用一个无参的构造函数

通过cl的getMethod getMethod(String, Class...)方法可以获取到cl所属类的方法method,其中第一个参数是方法名,后面的参数是方法的参数类型

通过method的invoke(Object obj, Object... args)方法可以调用这个方法,其中第一个参数是所属的实例,第二个参数是参数列表

猜你喜欢

转载自blog.csdn.net/mdjgold3/article/details/85344971