2011-10-17 31 views
9

Tôi đang xem một số mã Java và có mã này mà tôi thường thấy.Foo.class nó làm gì?

Foo.class 

Điều này đang được sử dụng để chỉ ra Loại lớp học? tương tự như

Foo.GetType(); 
typeof(Foo); 

trong C#?

Nó được sử dụng để làm gì? và ý nghĩa của nó là gì?

+1

Một số thông tin liên quan: 'System.Type' là loại chung trong .Net và không cụ thể cho C#. Tôi không biết nếu như vậy là hoặc không đúng cho loại 'Class' trong JVM (trái ngược với chính ngôn ngữ Java). –

+0

Thật khó tìm thấy mẩu thông tin này đến từ Java. Tôi tìm kiếm "C# class object", "C# reference to class" và nhiều thuật ngữ khác không biết điều này được gọi là 'Type' trong C# - những điều duy nhất bạn sẽ nhận được là hướng dẫn và giới thiệu cho OOP. Nhưng cảm ơn bạn cho câu hỏi đó :-) – Mitja

Trả lời

12

Có, Foo.class bằng Java tương đương với typeof(Foo) trong C#. Xem section 15.8.2 of the JLS để biết thêm thông tin về các chữ cái lớp.

Đó là không giống như gọi GetType() trên một tài liệu tham khảo, mà được các thời gian thực hiện kiểu của một đối tượng. Tương đương với Java là someReference.getClass().

Một lý do bạn có thể thấy nó thường xuyên hơn trong mã Java so với C# liên quan đến Generics. Đó không phải là hoàn toàn bình thường khi có cái gì đó như:

public class Generic<T> 
{ 
    private final Class<T> clazz; 

    public Generic(Class<T> clazz) 
    { 
     this.clazz = clazz; 
    } 
} 

này cho phép thực hiện thời gian truy cập vào các lớp học để suy tư vv Điều này chỉ cần thiết trong Java do loại chô bôi, trong đó một đối tượng của một kiểu generic có thể 't bình thường xác định các đối số kiểu của nó tại thời gian thực hiện.

+0

tuyệt vời. Cảm ơn. – DarthVader

+0

tuyệt vời. Tôi tìm thấy nó một chút buồn cười mà họ gọi nó là clazz :) – DarthVader

+2

@ user177883: Vâng, đó là một quy ước. Những người khác có thể sử dụng các tên khác nhau. Chỉ vì 'lớp' là một từ khóa. –

2

có lớp đặc biệt trong java được gọi là Lớp. nó được thừa hưởng Đối tượng. thể hiện của nó đại diện cho các lớp và giao diện trong thời gian chạy java, và cũng đại diện cho các loại Java nguyên thủy byte boolean, byte, char, ngắn, int, long, float, double) và từ khóa void. khi một lớp được nạp, hoặc phương thức defineClass() của trình nạp lớp được gọi là JVM, thì JVM tạo một đối tượng Class.

Java cho phép chúng ta tạo đối tượng Lớp tương ứng của một lớp theo nhiều cách, và .class là một trong số chúng. ví dụ:

Class c1 = String.class; 
Các vấn đề liên quan