[英]java class types - what do they mean?
什么是java class
类型? 我很困惑它的含义以及它与声明object
类型的不同之处:
Class className;
谢谢
Class对象有多种用途。 例如,假设我想基于存储在配置文件中的某个类名创建类的实例。
String className = config.myClass;
Class clazz = Class.forName(className);
Object myClassInstance = clazz.newInstance();
它表示对象的运行时类型 。 Class
类型的实际编程使用通常在反射和泛型中找到。
例如,在Class#forName()
帮助下抽象地加载JDBC驱动程序:
String jdbcDriverClassName = getItFromSomeExternalConfigurationFile();
Class.forName(jdbcDriverClassName);
或者将通用Object
类型转换为以前的类型:
public static <T> T findAttribute(String key, Class<T> type) {
return type.cast(attributeMap.get(key)); // It's a Map<String, Object>.
}
......可以用作
SomeType instance = findAttribute("someKey", SomeType.class);
这里可以在“通用对象转换器”的风格中找到更加扩展的示例。
实际上,阅读java.lang.Class
javadoc,包括所有可用的方法,应该可以让你知道它可以用于什么。
Class
是一种特殊类型的Object
,即Class
是Object
的子类。 您定义的每个类都有自己的Class
对象。 您可以将其作为MyObject.class
或myInstance.getClass()
来访问。 换句话说,您定义的任何类都具有Class
属性,其中任何类都是Object
。 我同意这对新手来说有点混乱。
javadoc说:
类Class的实例表示正在运行的Java应用程序中的类和接口。 枚举是一种类,注释是一种接口。 每个数组也属于一个类,它反映为一个Class对象,由具有相同元素类型和维数的所有数组共享。 原始Java类型(boolean,byte,char,short,int,long,float和double)和关键字void也表示为Class对象。
类没有公共构造函数。 相反,类对象由Java虚拟机在加载类时自动构造,并通过调用类加载器中的defineClass方法来构造。
您可以在检查某个变量的类型或检查继承运行时时使用它。 它也用于反射,动态加载类型并在它们上执行方法。
Class对象
要了解运行时类型信息(RTTI)如何在Java中工作,您必须首先了解在运行时如何表示类型信息。 这是通过一种称为Class对象的特殊对象来实现的,该对象包含有关该类的信息。 实际上,Class对象用于创建类的所有“常规”对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.