一、在定义一个方法的时候
1---
public void demo1(Class<String> param){}
这样定义代表了什么,与demo1(String param)有什么区别呢?
2---
public void demo2(Class<?> param){}
这样定义,又与demo2(Class<String> param)有什么区别呢?
3---
public void demo3(Class<? entends String> param){}
这样定义,又与demo2(Class<?> param)的区别是什么呢?
4---
public Class<String> demo4(String param){}
这样定义,返回值应该是 "xxxxxx"  还是"xxxx".getClass()为什么呢?
5---
public Class<?> demo5(String param){}
这样定义,返回值应该是什么呢?
6---
public Class<? extends Object> demo6(String param){}
这样定义,返回值应该是什么呢?感谢各位帮忙看一下,。

解决方案 »

  1.   

    1.前者参数是Class对象,后者是String对象。
    2.前者泛型为?,参数可以为任意类的Class对象。后者泛型为String,参数只能是String类及其子类的Class对象。
    3.前者泛型为? extends String,参数可以为任意继承String的类或者String的Class的对象。后者泛型为?,参数可以为任意类的Class对象。
    4."xxxx".getClass(),返回的是Class对象,不是String类本身。
    5.任意类的Class对象。
    6.任意继承Object类的类的Class对象。分清类和Class对象的关系,Class类也是一个类,Class类的实例表示正在运行的Java应用程序中的类和接口。Class没有公共构造方法。Class对象是在加载类时由Java虚拟机以及通过调用类加载器中的defineClass 方法自动构造的。以上摘自JDK API 1.6.0。可以说,每个JVM加载的类都有一个Class实例对象。
      

  2.   

    其实楼主不明白Class<>这个东东。
    Class应该明白吧?类对象。那么Class<String> param ,就是param只能接收String或它的子类的类对象,又因为String是被定义为final的,所以param只能接收String.class 了。它和Class<? entends String> 等价。Class<?> param 是可以接收任务类型的,它和Class<? extends Object>等价