MyClass.class
và MyClass.getClass()
cả hai dường như trả lại một java.lang.Class
. Có sự phân biệt tinh tế hoặc chúng có thể được sử dụng thay thế cho nhau không? Ngoài ra, là MyClass.class
một tài sản công cộng của lớp học siêu lớp Class
? (Tôi biết điều này tồn tại nhưng dường như không tìm thấy bất kỳ đề cập nào về nó trong javadocs)Sự khác nhau giữa việc gọi MyClass.class và MyClass.getClass()
Trả lời
Một là một phương thức thể hiện, vì vậy nó trả về lớp của đối tượng cụ thể, còn lại là hằng số lớp (tức là thời gian biên dịch).
Class n = Number.class;
Number o = 1;
o.getClass() // returns Integer.class
o = BigDecimal.ZERO;
o.getClass(); // returns BigDecimal.class
Cả hai trường hợp trả lại các thể hiện của đối tượng Lớp, mô tả một lớp Java cụ thể. Đối với cùng một lớp, chúng trả về cùng một cá thể (chỉ có một đối tượng Lớp cho mỗi lớp).
Một cách thứ ba để có được các đối tượng Class sẽ
Class n = Class.forName("java.lang.Number");
Hãy ghi nhớ rằng giao diện cũng có các đối tượng lớp (ví dụ như số ở trên).
Ngoài ra, MyClass.class có phải là thuộc tính công khai của lớp cha lớp học không?
Đây là từ khóa ngôn ngữ.
MyClass không có phương thức getClass tĩnh, nói cách khác, bạn không thể gọi MyClass.getClass(), thay vào đó bạn cần gọi (new MyClass()). GetClass() để nó hoạt động.
getClass() sẽ trả về đối tượng MyClass.class. Vì vậy, nói cách khác, MyClass.class là đối tượng kết quả trong khi getClass() là một phương thức. Phương thức getClass() hữu ích trong trường hợp bạn không biết lớp thực tế của đối tượng, ví dụ:
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
}
}
Lưu ý rằng ví dụ mã trên không phải là tốt nhất có thể, tôi chỉ đang cố gắng cho thấy nó có thể được sử dụng như thế nào. Các chức năng tương tự có thể đạt được với if(o instanceof Set) { ...}
.getClass()
trả về lớp thời gian chạy của đối tượng, vì vậy nó có thể thay đổi khi bạn thay đổi lớp của biến
.class
mặt khác luôn luôn trả hằng số lớp của "Loại"
LƯU Ý
Nếu lớp thời gian chạy xảy ra giống với lớp TYPE, cả hai sẽ bằng nhau. Ví dụ:
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()
Trước hết tiêu đề câu hỏi của bạn là một chút sai lầm! .getClass() is a method defined in java.lang.Object
vì vậy bất kỳ đối tượng nào trong java đều có thể gọi nó là .class được gọi trên chính lớp đó (giống như các biến tĩnh công cộng). Vì vậy, câu hỏi cần được (gắn bó với công ước java đặt tên)
What's the difference between calling MyClass.class and myClassObject.getClass()
Bây giờ chênh lệch thực tế
.getClass() là một phương pháp java bản địa java.lang.Object.Phương thức này sẽ trả về đối tượng java.lang.Class tương ứng với runtime class
của đối tượng mà trên đó nó được gọi ra. Vì vậy,
Test t = new TestSubClass();
Class c2 = t.getClass();
System.out.println(c2);
sẽ in class TestSubClass
nơi như .class sẽ trở lại lớp tĩnh đánh giá (được biết đến tại thời gian biên dịch). Nó thực sự là lớp đối tượng tương ứng với loại tài liệu tham khảo trỏ đến thực tế object.So
Test t = new TestSubClass();
Class c2 = Test.class;
System.out.println(c2);
sẽ in class Test
- 1. Sự khác nhau giữa MyClass.class và Class.forName ("className")
- 2. Sự khác nhau giữa IIFE và gọi
- 3. Sự khác biệt giữa Gọi() và BeginInvoke()
- 4. Sự khác nhau giữa việc gọi Double.valueOf (String s) và new Double (String s) là gì?
- 5. Sự khác nhau giữa DataBinder và ConversionService trong Spring
- 6. Sự khác nhau giữa "./somescript.sh" và ". ./somescript.sh"
- 7. Sự khác nhau giữa Tkinter và Tkinter
- 8. Sự khác nhau giữa ParameterInfo.DefaultValue và ParameterInfo.RawDefaultValue
- 9. Sự khác nhau giữa restartLoader và onContentChanged
- 10. Sự khác nhau giữa% w và% W
- 11. Sự khác nhau giữa AlarmManager và ScheduledExecutorService
- 12. Sự khác nhau giữa NoClassDefFoundError và ClassNotFoundException?
- 13. Sự khác nhau giữa ApacheActiveMQ và ApacheActiveMQApollo
- 14. Sự khác nhau giữa tasklet và workqueue
- 15. Sự khác nhau giữa Rscript và Littler
- 16. Sự khác nhau giữa JAVA_HOME và JRE_HOME
- 17. Sự khác nhau giữa REST và WebServices
- 18. Sự khác nhau giữa SpVoice và SpeechSynthesizer
- 19. Sự khác nhau giữa .Equals và ==
- 20. Sự khác nhau giữa MBean và MXBean
- 21. Sự khác nhau giữa ConfigurationManager và ConfigurationSettings
- 22. Sự khác nhau giữa! = Và =! trong Java?
- 23. Sự khác nhau giữa 'SpecialFolder.LocalApplicationData' và 'SpecialFolder.ApplicationData'?
- 24. Sự khác nhau giữa String.getBytes() và IOUtils.toByteArray()?
- 25. Sự khác nhau giữa presentModalViewController và presentViewController?
- 26. Sự khác nhau giữa NSInvocationOperation và NSBlockOperation
- 27. Sự khác nhau giữa TVar và TMVar
- 28. Sự khác nhau giữa onClickListener và onItemClickListener
- 29. Sự khác nhau giữa `require` và` gem`
- 30. Sự khác nhau giữa HttpUtility.HtmlEncode và Server.HtmlEncode
Ý anh là gì bởi một "Class liên tục"? Khi bạn gán "Class n = Number.class;" giá trị của n là bao nhiêu? – Mocha
n được chỉ định một thể hiện của Class, đối tượng với mô tả số "lớp" (mà thực sự là một giao diện). – Thilo