日期:2014-05-20  浏览次数:20745 次

请问Class<?>是作什么用的。
工作需要,目前刚刚开始接触Java,在使用JDBC时,又看到CallableStatement对象下有getObject(String parameterName, Map<String, Class<?>> map)方法。
现在不明白Class<?>是作什么用的,为什么要在Class后使用<?>呀!
这个问号表示什么意思?

多谢各位帮忙啦!

------解决方案--------------------
有些容器可以放任何对象,比如List,但是再取的时候需要做类型转换。如果在声明的时候,指定类型,那么取的时候就不需要做类型强转了。

List<User> list = new ArrayList<User>();
------解决方案--------------------
建议你看一下泛型
------解决方案--------------------
泛型的参数类型还可以是通配符类型。
例如Class<?> classType = Class.forName("java.lang.String"); 
“?”代表未知类型
------解决方案--------------------
public final class Class<T>extends Objectimplements Serializable, GenericDeclaration, Type, AnnotatedElementClass 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。 

Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。 

以下示例使用 Class 对象来显示对象的类名: 


void printClassName(Object obj) {
System.out.println("The class of " + obj +
" is " + obj.getClass().getName());
}
 还可以使用一个类字面值(JLS Section 15.8.2)来获取指定类型(或 void)的 Class 对象。例如: 


System.out.println("The name of class Foo is: "+Foo.class.getName());

------解决方案--------------------
java.lang 
类 Class<T>
java.lang.Object
java.lang.Class<T>
类型参数:
T - 由此 Class 对象建模的类的类型。例如,String.class 的类型是 Class<String>。如果将被建模的类未知,则使用 Class<?>。

------解决方案--------------------
Class类一般用于反射,<>表示泛型 ?表示通配符
------解决方案--------------------
楼上说的很对!