MyClass.class
和MyClass.getClass()
都似乎返回java.lang.Class
。有微妙的區別還是可以互換使用?另外,MyClass.class
是超類Class
類的公共屬性? (我知道這存在但似乎無法在javadoc中找到任何提及)調用MyClass.class和MyClass.getClass()之間的區別是什麼?
回答
一個是實例方法,所以它返回特定對象的類,另一個是類常量(即已知的編譯時)。
Class n = Number.class;
Number o = 1;
o.getClass() // returns Integer.class
o = BigDecimal.ZERO;
o.getClass(); // returns BigDecimal.class
這兩種情況都返回Class對象的實例,它描述了一個特定的Java類。對於同一個類,它們返回相同的實例(每個類只有一個Class對象)。
第三種方式來獲得類對象將是
Class n = Class.forName("java.lang.Number");
請記住,接口也有類對象(如上面的號碼)。
另外,MyClass.class是超類Class類的公共屬性嗎?
這是一個語言關鍵字。
MyClass沒有靜態getClass方法,換句話說,您不能調用MyClass.getClass(),而是需要調用(new MyClass())。getClass()才能使其工作。
getClass()將返回一個MyClass.class對象。換句話說,MyClass.class是結果對象,而getClass()是一種方法。該的getClass()方法是在你不知道實際的類對象的情況下非常有用,例如:
public void someMethod(Object o) {
if(o.getClass().equals(Set.class)) {
// The object is a set
} else if(o.getClass().equals(List.class)) {
// The object is a List
}
}
注意上面的代碼示例可能不是最好的,我只是想展示如何使用它。同樣的功能可以用if(o instanceof Set) { ...}
.getClass()
返回運行時類的對象,所以它可以當你改變類的變量
.class
,另一方面總是返回的類常量進行修改來實現「類型」
注意
如果運行時類恰好是相同類型的類,都將是平等的。 例子:
Long x = new Long(2);
Class c1 = Long.class;
Class c2 = x.getClass();
//c1==c2
What's the difference between calling MyClass.class and MyClass.getClass()
所有問題的標題首先是有點誤導! .getClass() is a method defined in java.lang.Object
因此,java中的任何對象都可以在類中調用它,因爲.class在類本身上被調用(如公共靜態變量)。所以問題應該是(堅持對Java命名約定)現在
What's the difference between calling MyClass.class and myClassObject.getClass()
實際差異
.getClass()是在java.lang.Object中本地Java方法。此方法將返回對應於其調用對象的runtime class
的java.lang.Class對象。所以
Test t = new TestSubClass();
Class c2 = t.getClass();
System.out.println(c2);
將打印class TestSubClass
這裏爲的.class將返回靜態評估(在編譯時已知)類。它實際上是Class對象對應的引用類型,指向實際object.So
Test t = new TestSubClass();
Class c2 = Test.class;
System.out.println(c2);
將打印class Test
- 1. $(())和expr之間的區別是什麼?
- 2. $和$ .fn之間的區別是什麼?
- 3. ++和:haskell之間的區別是什麼?
- 4. $(「」)和$ .find(「」)之間的區別是什麼?
- 5. 「\」和「\。」之間的區別是什麼?
- 6. 「$ | ++」和「$ | = 1」之間的區別是什麼
- 7. $(...)和`...`之間的區別是什麼
- 8. .equals()和==之間的區別是什麼?
- 9. [undefined]和[,]之間的區別是什麼?
- 10. 區別:%% a和%variable%變量之間的區別是什麼?
- 11. 什麼是爲PrintWriter和DataOutputStream之間的區別是什麼?
- 12. 什麼是MyClass.class?
- 13. 是什麼Quartz調度和JMS之間的區別?
- 14. 什麼是UIGestureRecognizer的使用和UITouch和UIGestureRecoginzer之間的區別
- 15. Javascript - 自調用和正常函數調用之間的區別是什麼?
- 16. MVC和MVVM之間的區別和相似之處是什麼?
- 17. TVF/UDF之間的區別是什麼
- 18. [EmailPasswordAuthProvider,EmailAuthProvider]之間的區別是什麼
- 19. System.Linq.Enumerable.WhereListIterator&System.Linq.Enumerable.WhereSelectListIterator之間的區別是什麼?
- 20. 什麼之間的區別〜^和Git中
- 21. 什麼@android之間的區別:和android:
- 22. python函數調用與括號之間的區別是什麼?
- 23. 使用Profinet的UINT和WORD之間的區別是什麼
- 24. 什麼是SetupAPI,SetupAPI1和SetupAPI2?他們之間有什麼區別?
- 25. lock_guard之後lock()和guard()之間的區別是什麼
- 26. 「層」和「層」之間有什麼區別?
- 27. Tableau和QlikView之間有什麼區別
- 28. Microsoft.CompilerServices.AsyncTargetingPack和Microsoft.Bcl.Async之間有什麼區別?
- 29. @Entity和@embeddable之間有什麼區別
- 30. ContentObservable和DataSetObservable之間有什麼區別?
你的意思是由一個「類常量」?當您分配「Class n = Number.class;」時n的價值是什麼? – Mocha 2010-03-18 06:52:03
n獲取了一個Class的實例,該對象描述了Number「class」(實際上是一個接口)。 – Thilo 2010-03-18 06:56:49