[英]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.