2010-07-20 60 views
5

我正在構建一個小的Android應用程序,但這是一個比android問題更多的Java問題。通過教程看看有如下幾行:在Java中,對Class.class的引用是做什麼的?

startService(new Intent(this, MyService.class)); 

「MyService.class」字段究竟代表什麼?這只是對模板類的引用嗎?

謝謝。

回答

5

Andy的回答絕對正確,但我想稍微擴展一點。

.class是獲取Class對象實例的特殊語法。只有類型可用且沒有相關對象的實例在周圍時纔可以使用它。它可以與任何具體的類型名稱一起使用,包括數組和基元。例如,int.class是有效的。

獲取Class對象的這種方式(以及其他方式)記錄在舊的Sun reflection API docs中。

特殊的.class語法在通用代碼中經常出現作爲「類型標記」的慣用用法。當在「傳遞編譯時和運行時類型信息的方法之間傳遞」(Joshua Bloch's Effective Java 2e,第142頁)時,用.class獲得的類文字被稱爲類型標記。

3

是的,MyService.class返回一個表示MyService類的Class對象。意圖使用它來確定您打算啓動哪個服務或活動。

+0

有沒有關於Java使用.class協議的更多信息?我明白使用它的結果是什麼,但爲什麼java使用這種實現?爲什麼該語法甚至存在,而不是像新的MyService()那樣調用。 – Falmarri 2010-07-20 23:31:35

+0

我不是專家,但我懷疑它與Android的架構有關,試圖最小化或隱藏開發人員與顯式活動或服務對象創建的交互。不知道具體爲什麼,但我會盡力找出答案。 – 2010-07-20 23:37:28

+1

這通常是因爲Java泛型的類型擦除而完成的。您可以將.cl​​ass傳遞給參數類型爲Class 的方法,以捕獲類的運行時類型,因爲您無法安全地使用泛型參數本身做很多事情。 – 2010-07-20 23:39:32

1

MyService.class允許您從單獨的類名(而不是類的實例請求object.getClass())獲取描述MyClass類的Class對象。

1

在JVM中,加載類時,類型爲Class的對象表示內存中的加載類。 com.abc.MyClass.class是一個字面表達式,表示類com.abc.MyClassClass對象。

同樣的Class對象也可以通過調用myClassReference.getClass()方法獲得,如果你有一個類的對象的引用。

Class對象可用於查找關於類結構,訪問字段,調用方法的信息並使用Java Reflection API實例化類的對象。

相關問題