2011-10-18 37 views

Trả lời

4

Tôi nghĩ, tôi tìm thấy giải pháp. Như tôi nghĩ, nó không thể với javac hiện tại. chú thích cục bộ chỉ là các nhận xét đơn giản và sẽ không được xử lý bởi api xử lý chú thích có thể cắm được. NHƯNG có những nỗ lực thú vị trong JSR308, xử lý chú thích kiểu hỗ trợ những điều kỳ diệu như thông số về biến kiểu, biến địa phương, chú thích kiểm tra kiểu và đúc ... và có vẻ như nó sẽ được tích hợp vào openJDK 8. đẹp

+0

JSR 308 không trực tiếp hỗ trợ xử lý chú thích (mặc dù nó sửa chữa một lỗi lâu dài trong đó chú thích biến cục bộ không được lưu trữ trong tệp lớp). Nó có các tính năng khác mà bạn đề cập, và nó là một phần của Java 8. [Checker Framework] (http://checkerframework.org) được xây dựng trên JSR 308 và cung cấp các khách truy cập thuận tiện xử lý các chú thích trong các thân phương thức. – mernst

1

Trong JSR269, giao diện có liên quan sẽ là javax.lang.model.element.VariableElement, mà thừa hưởng getAnnotation(Class<A> annotationType) để truy cập vào các chú thích như:

for (VariableElement variable : ElementFilter.fieldsIn(methods)) { 
    final AnnotationType annotation = variable.getAnnotation(AnnotationType.class); 
    if (annotation != null) { 
     // ... 
    } 
} 
+2

cảm ơn câu trả lời đó. Nhưng 'phương thức' là một tập hợp các phần tử có nghĩa, nó phải chứa các trường được chú thích (làm cho phương thức trở thành một tên xấu cho tập hợp đó). do đó, 'fieldsIn' không trả về" trường (= biến cục bộ) trong phương thức "nhưng chỉ lọc một tập hợp các phần tử đã cho. Và vấn đề với điều đó là, API sẽ không cung cấp cho tôi các biến địa phương có chú thích (như tham số của phương thức 'process'). Bây giờ, có vẻ như tôi phải xử lý các lớp ALL (không chỉ chú thích) và tìm kiếm các chú thích biến cục bộ theo cách thủ công (mặc dù tôi không biết chính xác). hoặc có cách nào để sử dụng ví dụ của bạn? – wrm

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