2008-12-18 17 views
7

Tôi đã viết một chú thích java trông như thế này:Tôi có thể tạo ra một lỗi thời gian biên dịch dựa trên các loại của lĩnh vực này được chú thích

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.FIELD) // can I further limit this to only fields of type DomainObject? 
public @interface Owns { 
} 

Sau khi xem xét ngắn gọn xung quanh tôi không thể nhìn thấy nếu có một cách hạn chế hơn nữa việc sử dụng chú thích này để chỉ có thể chú thích các trường của một loại cụ thể. Chú thích này là tùy chỉnh cho miền của chúng tôi và chỉ có thể được sử dụng trên các phiên bản của lớp đối tượng miền cơ sở của chúng tôi.

Có ai biết cách thực thi điều này tại thời gian biên dịch không?

Cảm ơn bạn đã trợ giúp!

Trả lời

8

Bạn có thể phát ra lỗi trong một số annotation processor (bạn sẽ phải sử dụng private API nếu bạn muốn hỗ trợ Java 5). Bạn có thể sử dụng số Messager mà bạn nhận được từ số ProcessorEnvironment được chuyển đến init.

Làm thế nào có hiệu quả này là có thể phụ thuộc vào chuỗi công cụ của bạn. Sẽ tốt nếu bạn sử dụng javac để biên dịch bằng dòng lệnh hoặc thông qua tập lệnh xây dựng. Trong phiên bản Eclipse của tôi, tôi đã phải kích hoạt bộ xử lý chú thích theo cách thủ công cho dự án (thông qua cài đặt dự án) và các lỗi không xuất hiện ở bất kỳ đâu rõ ràng. (Các JDT plugins chú thích làm có điểm mở rộng cho phép tích hợp tốt hơn với các IDE nếu bạn muốn cung cấp hỗ trợ tùy chỉnh.) Nó sẽ trả tiền để kiểm tra với công cụ thường được sử dụng, đặc biệt là nếu bạn cần hỗ trợ môi trường phát triển tùy ý.

+0

Đó là thông tin tôi đang tìm kiếm. Tôi sẽ đào sâu và xem liệu nó có đáng giá hay không. Cảm ơn. –

0

Tôi tin rằng đây không phải là enforcable tại thời gian biên dịch - Nếu bạn muốn đảm bảo rằng nó không phải là trên bất kỳ lĩnh vực không phù hợp, bạn sẽ phải kiểm tra lúc chạy/tải thời gian.

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