Class的Java文档说:
Class对象是由Java Virtual Machine在加载类时自动构造的,并通过调用类加载器中的defineClass方法来实现。
这些Class对象是什么?它们是否与通过调用new从类实例化的对象相同
另外,例如object.getClass().getName(),即使我不是从java.lang.Class继承的,如何将所有内容都转换为超类Class
发布于 2010-12-16 02:13:34
任何内容都不会被类型转换为Class。Java中的每个Object都属于某个class。这就是所有其他类继承的Object类定义getClass()方法的原因。
getClass()或Foo.class -getClass()返回一个Class对象,该对象包含有关类的一些元数据:
以及一些有用的方法,如强制转换和各种检查(isAbstract()、isPrimitive()等)。the javadoc准确地显示了您可以获得的有关类的信息。
因此,例如,如果您的一个方法被赋予了一个对象,并且您希望在使用@Processable注释对其进行处理时对其进行处理,那么:
public void process(Object obj) {
if (obj.getClass().isAnnotationPresent(Processable.class)) {
// process somehow;
}
}在本例中,您将获得有关给定对象的类的元数据(无论它是什么),并检查它是否具有给定的注释。Class实例上的许多方法被称为“反射操作”,或者简称为“反射。Read here关于反射,为什么以及何时使用它。
还要注意,Class对象表示正在运行的Java应用程序中的枚举和接口以及类,并且具有各自的元数据。
总而言之- java中的每个对象都有(属于)一个类,并且有一个各自的Class对象,该对象包含关于它的元数据,可以在运行时访问。
发布于 2010-12-16 02:25:25
Class对象是一种描述对象类的元对象。它主要与Java的反射功能一起使用。您可以将其视为实际类的“蓝图”。例如,你有一辆这样的班车:
public class Car {
public String brand;
}然后你可以构造一个class对象来描述你的"Car“类。
Class myCarClass = Class.forName("Car");现在,您可以对class对象上的Car类执行各种查询:
myCarClass.getName() - returns "Car"
myCarClass.getDeclaredField("brand") - returns a Field object describing the "brand" field诸若此类。每个java对象都有一个方法getClass(),该方法返回描述Java对象的类的类对象。所以你可以这样做:
Car myCar = new Car();
Class myCarClass = myCar.getClass();这也适用于你不知道的对象,例如你从外部获得的对象:
public void tellMeWhatThisObjectsClassIs(Object obj) {
System.out.println(obj.getClass().getName());
}你可以给这个方法提供任何java对象,它会打印出你给它的对象的实际类。
在使用Java时,大多数情况下您不需要担心Class对象。不过,他们有一些方便的用例。例如,它们允许您以编程方式实例化某个类的对象,这通常用于对象序列化和反序列化(例如,将Java对象与XML或JSON来回转换)。
Class myCarClass = Class.forName("Car");
Car myCar = myCarClass.newInstance(); // is roughly equivalent to = new Car();你也可以用它来找出你的类的所有声明的字段或方法等,这在某些情况下非常有用。因此,例如,如果你的方法得到了一个未知的对象,而你需要了解更多关于它的信息,比如它是否注入了一些接口等,那么Class类就是你的朋友。
长话短说,java.lang.reflect包中的类、字段、方法等类允许您分析已定义的类、方法、字段,创建它们的新实例,调用方法所有其他类型的东西,它们允许您在运行时动态执行这些操作。
发布于 2010-12-16 02:16:49
getClass()是一个方法,它返回一个对象,该对象是java.lang.Class的一个实例...没有涉及到造型。造型将如下所示:
Class<?> type = (Class<?>) object;https://stackoverflow.com/questions/4453349
复制相似问题