2010-07-20 26 views
5

Tôi đang xây dựng một ứng dụng Android nhỏ, nhưng đây là một câu hỏi Java hơn là một câu hỏi android. Nhìn qua các hướng dẫn có các dòng giống như sau:Trong Java, tham chiếu đến Class.class làm gì?

startService(new Intent(this, MyService.class)); 

trường "MyService.class" đại diện chính xác là gì? Đó có phải chỉ là một tham chiếu đến lớp cho một mẫu không?

Cảm ơn.

Trả lời

5

Câu trả lời của Andy chắc chắn là chính xác, nhưng tôi muốn mở rộng điểm một chút.

.class là một cú pháp đặc biệt để có được một thể hiện của đối tượng Lớp. Nó có thể được sử dụng khi chỉ có loại có sẵn và không có thể hiện của đối tượng liên quan. Nó có thể được sử dụng với bất kỳ tên kiểu cụ thể nào, bao gồm mảng và nguyên thủy. Ví dụ: int.class hợp lệ.

Cách này (và các cách khác) để lấy đối tượng Lớp được ghi lại trong tài liệu cũ Sun reflection API docs.

Cú pháp đặc biệt .class thường xuất hiện trong cách sử dụng thành ngữ như một "loại mã thông báo" trong mã chung. Một lớp học thu được với .class được gọi là một loại mã thông báo khi "được chuyển giữa các phương thức để giao tiếp cả thông tin về thời gian biên dịch và kiểu thời gian chạy" (Joshua Bloch's Effective Java 2e, trang 142).

3

Có, MyService.class trả về đối tượng Lớp đại diện cho lớp MyService. Mục đích sử dụng nó để xác định Dịch vụ hoặc Hoạt động nào bạn dự định bắt đầu.

+0

Có thêm thông tin về việc sử dụng giao dịch .class của java không? Tôi hiểu kết quả của việc sử dụng nó là gì và như vậy, nhưng tại sao java lại sử dụng cài đặt này? Tại sao cú pháp đó thậm chí còn tồn tại thay vì chỉ gọi như MyService mới(). – Falmarri

+0

Tôi không có chuyên gia, nhưng tôi nghi ngờ rằng nó có liên quan đến kiến ​​trúc của Android đang cố gắng giảm thiểu hoặc ẩn tương tác của nhà phát triển với việc tạo đối tượng Hoạt động hoặc Dịch vụ rõ ràng. Không biết cụ thể tại sao, nhưng tôi sẽ cố gắng tìm hiểu. –

+1

Nó thường được thực hiện vì loại tẩy xóa của Generics Java. Bạn có thể chuyển .class thành một phương thức với kiểu tham số Class để nắm bắt kiểu thời gian chạy của một lớp, vì bạn không thể làm được gì nhiều với chính một tham số chung. –

1

MyService.class cho phép bạn lấy đối tượng Lớp mô tả lớp MyClass, chỉ từ tên lớp (ngược với trường hợp của lớp để yêu cầu object.getClass()).

1

Trong JVM, khi một lớp được tải, một đối tượng thuộc loại Class đại diện cho lớp được nạp trong bộ nhớ. com.abc.MyClass.class là một biểu thức nghĩa đen đại diện cho đối tượng Class cho lớp com.abc.MyClass.

Cùng một đối tượng Class cũng có thể thu được bằng cách gọi phương thức myClassReference.getClass() nếu bạn có tham chiếu đến đối tượng của lớp.

Đối tượng Class có thể được sử dụng để tìm thông tin về cấu trúc của lớp, truy cập trường, gọi phương thức và khởi tạo đối tượng của lớp bằng cách sử dụng API phản chiếu Java.

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