2012-10-13 22 views
6

Đây có lẽ là một câu hỏi ngu ngốc, nhưng tôi không tìm thấy câu hỏi nào ở nơi khác. Tôi đang phải trải qua những điều cơ bản của Android, và khi tôi cố gắng tạo ra một ý định đặc biệt để chạy một hoạt động lựa chọn của tôi, hướng dẫn nói với tôi để xây dựng nó theo cách này:Khi tạo mục đích Android và chỉ định hoạt động mục tiêu, cú pháp ".class" này là gì?

Intent intent = new Intent(this, DisplayMessageActivity.class); 

đâu "DisplayMessageActivity" là lớp cho hoạt động tôi đang chạy. Những gì tôi không nhận được là, phần ".class" là gì? Thông số đó, như tôi hiểu, được cho là một đối tượng Class. "Lớp" là một trường của phân lớp Hoạt động của tôi? Hoặc khi tôi nói "DisplayMessageActivity.class", tôi đang đề cập đến một tập tin .class thực tế (có vẻ hơi lạ)?

Mọi trợ giúp đều được đánh giá cao!

Trả lời

5

Trong khi .class có vẻ là một trường truy cập bình thường, nó thực sự là một cấu trúc ngôn ngữ đặc biệt, được giải thích rất rõ trong hướng dẫn Java Retrieving Class Objects.

Nó nói, trích dẫn:

Nếu loại có sẵn nhưng không có ví dụ sau đó nó có thể để có được một lớp bằng cách thêm ".class" vào tên của các loại. Đây cũng là cách dễ nhất để có được Class cho một kiểu nguyên thủy.

Và họ đưa ra ví dụ:

boolean b; 
Class c = b.getClass(); // compile-time error 

Class c = boolean.class; // correct 


Trong ngày của tôi để sử dụng ngày của Java, đây không phải là một cấu trúc cực kỳ sử dụng, và nhiều người không biết gì về nó. Nói chung nó được sử dụng với generics và tương tự khi cụ thể các lớp học nói chung chứ không phải là trường hợp của chúng.

Tôi hy vọng điều này sẽ hữu ích. :)

4

Điều tôi không hiểu là phần ".class" là gì? Thông số đó, như tôi hiểu, được cho là một đối tượng Class.

Điều đó là chính xác.

SomeClass.class thực sự là cú pháp Java có nghĩa là "cung cấp cho tôi đối tượng Class tương ứng với loại SomeClass". Và lưu ý rằng bạn có thể sử dụng nó trên bất kỳ loại nào ... không chỉ là tên lớp.

"Lớp" là một trường của phân lớp Hoạt động của tôi?

No. Không phải là trường. Bạn có thể nghĩ về nó tương tự như một trường tĩnh, nhưng thực sự nó không phải là thứ như vậy. (Cũng giống như someArray.length là không thực sự là một lĩnh vực của đối tượng mảng.)

Hoặc khi tôi nói "DisplayMessageActivity.class", tôi đề cập đến một tập tin .class thực tế

Nó được đề cập đến a Classđối tượng ... không phải là tệp ".class".

Các vấn đề liên quan