什么是类描述符?它是特定类的Class
对象吗?
答案 0 :(得分:6)
是的,Class
对象是某个“类”的类描述符。
来自the API:
此类的实例表示正在运行的Java应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组也属于一个类,它反映为一个Class对象,由具有相同元素类型和维数的所有数组共享。原始Java类型(boolean,byte,char,short,int,long,float和double)以及关键字void也表示为
Class
个对象。
以下是一个简单使用Class
方法来反射描述类型的示例:
static void describe(Class<?> clazz, String pad, String leadin) {
if (clazz == null) return;
String type =
clazz.isInterface() ? "interface" :
clazz.isArray() ? "array" :
clazz.isPrimitive() ? "primitive" :
clazz.isEnum() ? "enum" :
"class";
System.out.printf("%s%s%s %s ( %s )%n",
pad, leadin, type, clazz.getSimpleName(), clazz.getName());
for (Class<?> interfaze : clazz.getInterfaces()) {
describe(interfaze, pad + " ", "implements ");
}
describe(clazz.getComponentType(), pad + " ", "elements are ");
describe(clazz.getSuperclass(), pad + " ", "extends ");
}
static void describe(Class<?> clazz) {
describe(clazz, "", "");
System.out.println();
}
public static void main(String[] args) {
describe(boolean[][].class);
describe(java.math.RoundingMode.class);
describe(java.util.ArrayList.class);
describe(void.class);
}
以上代码段产生以下输出:
array boolean[][] ( [[Z )
implements interface Cloneable ( java.lang.Cloneable )
implements interface Serializable ( java.io.Serializable )
elements are array boolean[] ( [Z )
implements interface Cloneable ( java.lang.Cloneable )
implements interface Serializable ( java.io.Serializable )
elements are primitive boolean ( boolean )
extends class Object ( java.lang.Object )
extends class Object ( java.lang.Object )
enum RoundingMode ( java.math.RoundingMode )
extends class Enum ( java.lang.Enum )
implements interface Comparable ( java.lang.Comparable )
implements interface Serializable ( java.io.Serializable )
extends class Object ( java.lang.Object )
class ArrayList ( java.util.ArrayList )
implements interface List ( java.util.List )
implements interface Collection ( java.util.Collection )
implements interface Iterable ( java.lang.Iterable )
implements interface RandomAccess ( java.util.RandomAccess )
implements interface Cloneable ( java.lang.Cloneable )
implements interface Serializable ( java.io.Serializable )
extends class AbstractList ( java.util.AbstractList )
implements interface List ( java.util.List )
implements interface Collection ( java.util.Collection )
implements interface Iterable ( java.lang.Iterable )
extends class AbstractCollection ( java.util.AbstractCollection )
implements interface Collection ( java.util.Collection )
implements interface Iterable ( java.lang.Iterable )
extends class Object ( java.lang.Object )
primitive void ( void )
Class.getName()
答案 1 :(得分:0)
是。请参阅Class docs。
答案 2 :(得分:0)
您提供的上下文非常少,但“类描述符”可以用来描述反序列化对象所需的数据:
http://java.sun.com/javase/6/docs/platform/serialization/spec/class.html
在这种情况下,“类描述符”实际上是java.io.ObjectStreamClass
。 ObjectStreamClass描述了一个类,但它与类本身不同。