2010-08-23 28 views
33

java.lang.annotation.ElementType:Các hằng số ElementType chú thích Java có ý nghĩa gì?

Loại phần tử chương trình. Các hằng số của kiểu liệt kê này cung cấp một phân loại đơn giản các phần tử đã khai báo trong một chương trình Java. Các hằng số này được sử dụng với loại chú thích meta Target để chỉ định nơi hợp pháp để sử dụng loại chú thích.

Có các hằng số sau:

  • ANNOTATION_TYPE - Tờ khai Loại chú thích
  • CONSTRUCTOR - Tờ khai Constructor
  • LĨNH VỰC - Tờ khai Field (bao gồm hằng enum)
  • LOCAL_VARIABLE - Biến cục bộ khai ble
  • PHƯƠNG PHÁP - Tờ khai Method
  • GÓI - Gói khai
  • THÔNG SỐ - Tờ khai Parameter
  • LOẠI - Class, giao diện (bao gồm loại chú thích), hoặc enum khai

Ai đó có thể giải thích mỗi người trong số họ là gì (họ sẽ được chú thích ở đâu? trong mã thực tế)?

+0

Mô tả không đủ rõ ràng chưa? Chắc chắn bạn hiểu ít nhất một số trong số họ? – meriton

+0

'@meriton:' Tôi chỉ thấy chú thích trên các trường, phương thức và lớp học, có thể tương ứng với __FIELD__, __METHOD__ và __TYPE__. Tôi sẽ đăng các ví dụ về các chú thích cho từng cái này, và có lẽ ai đó sẽ điền phần còn lại? –

+0

Java 8 thêm hai hằng số mới, TYPE_PARAMETER và TYPE_USE. – mernst

Trả lời

33

này tóm tắt những chính:

@BlahType 
public class MyAnnotatedClass { 
    @BlahField 
    private String foo; 

    @BlahConstructor 
    public MyAnnotatedClass() { 
    } 

    @BlahMethod 
    public String bar(@BlahParameter String str) { 
    @BlahLocalVariable String asdf = "asdf"; 
    return asdf + str; 
    } 
} 

Sau đó ANNOTATION_TYPE chỉ nằm trên định nghĩa chú thích và gói được xác định trong tệp package-info.java trong gói, see here.

+4

Câu trả lời sẽ tốt hơn nhiều nếu bạn cũng bao gồm các đoạn mã cho ANNOTATION_TYPE và cho PACKAGE. –

81

Hãy nói rằng các chú thích mà bạn chỉ định ElementType được gọi YourAnnotation:

  • ANNOTATION_TYPE - Tờ khai Loại chú thích. Lưu ý: này đi vào chú thích khác

    @YourAnnotation 
    public @interface AnotherAnnotation {..} 
    
  • CONSTRUCTOR - Tờ khai Constructor

    public class SomeClass { 
        @YourAnnotation 
        public SomeClass() {..} 
    } 
    
  • LĨNH VỰC - Tờ khai Field (bao gồm hằng enum)

    @YourAnnotation 
    private String someField; 
    
  • LOCAL_VARIABLE - biến địa phương tờ khai. Lưu ý: Điều này không thể đọc được khi chạy, vì vậy nó chỉ được sử dụng cho những thứ biên dịch, như chú thích @SuppressWarnings.

    public void someMethod() { 
        @YourAnnotation int a = 0; 
    } 
    
  • PHƯƠNG PHÁP - Phương pháp khai

    @YourAnnotation 
    public void someMethod() {..} 
    
  • GÓI - Tờ khai Package. Lưu ý: Chỉ có thể sử dụng trong package-info.java.

    @YourAnnotation 
    package org.yourcompany.somepackage; 
    
  • THÔNG SỐ - Tờ khai Parameter

    public void someMethod(@YourAnnotation param) {..} 
    
  • TYPE - Class, giao diện (bao gồm loại chú thích), hoặc enum khai

    @YourAnnotation 
    public class SomeClass {..} 
    

Bạn có thể chỉ định nhiều ElementType s cho một chú thích nhất định. Ví dụ .:

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD}) 
+0

'@Bozho:' Cảm ơn lời khuyên chuyên nghiệp. Tôi kiểm tra đánh dấu điều bên dưới bộ đếm phiếu bầu. –

+1

+1 cho nhiều mục tiêu –

2

LOẠI:

chú giải:

@Target({ElementType.TYPE}) // This annotation can only be applied to 
public @interface Tweezable { // class, interface, or enum declarations. 
} 

và sử dụng Ví dụ:

@Tweezable 
public class Hair { 
    ... 
} 
Các vấn đề liên quan