Lớp học là "bản thiết kế" của đối tượng. Ví dụ là một đối tượng.
Nếu chúng ta có
public class SomeClass {
int a;
SomeClass(int a) {
this.a = a
}
}
Chúng ta có thể có một thể hiện của lớp này
SomeClass c = new SomeClass(10);
c
là một thể hiện của lớp. Nó có một số nguyên a
với giá trị 10
.
Đối tượng SomeClass.class
đại diện cho Class
.
Đây SomeClass.class
là một object
loại Class
trong đó có những thông tin mà SomeClass
là
- một lớp bê tông với
- một constructor
với một thành viên biến nguyên
và nhiều hơn nữa khác metadata
về lớp học SomeClass
. Lưu ý rằng nó không có giá trị cho a
.
Bạn nên sử dụng get(c)
trong trường hợp bạn đang có kế hoạch để làm điều gì đó với một instance
của c
như gọi c.a
hoặc các chức năng hữu ích khác để manupulate/nhận dữ liệu của ví dụ.
Bạn nên sử dụng get(SomeClass.class)
khi nhận được trả lại một cái gì đó dựa trên thực tế là đối số là một số loại lớp. Ví dụ: nếu đây là phương thức thuộc lớp học Registry
có bản đồ truy xuất số implementation class
dựa trên loại lớp được truyền vào.
+1 để tham khảo tài liệu. Các loại thực tế trong thời gian chạy tuy nhiên là đồng bằng java/lang/Class và nó là loại chung đối số không được bảo quản do thực hiện Generics java (loại tẩy xoá). –
@ KrzysztofJabłoński trong mã nếu bạn làm 'Class clazz = someClass.getClass()' nó sẽ yêu cầu bạn tham số hóa biến. là nó đúng khi nói rằng loại sẽ là Class tại thời gian biên dịch nhưng java.lang.Class khi chạy? –
smcg
Có. Generics được giới thiệu trong Java 5 cải thiện an toàn kiểu tại thời gian biên dịch, bằng cách giới thiệu các tham số kiểu được gọi là. Khi bạn đang thực hiện một số trình biên dịch thao tác kiểu nguy hiểm, hãy so sánh các tham số kiểu và cảnh báo bạn. Trong các tham số kiểu bytecode được thay thế bởi [bounds] của chúng (http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html) (hoặc Object khi không có) - để thông tin bị xóa. [Paper] (http://docs.oracle.com/javase/tutorial/java/generics/erasure.html) nói rằng nó được thực hiện theo cách đó trong java (không giống như đối với [ví dụ C#] (http://msdn.microsoft. com/en-us/library/512aeb7t.aspx)). –