2009-02-25 37 views
41

Tôi vừa phát hiện ra tính năng này.@interface khai báo mặc định sử dụng trong Java

Khai báo giao diện bằng cú pháp "@interface" cho phép bạn đặt giá trị mặc định.

public @interface HelloWorld { 
    public String sayHello() default "hello world"; 
} 

Đây là điều mới mẻ đối với tôi. Giá trị mặc định đó giả sử được sử dụng như thế nào.

tôi không thể tìm thấy tài liệu tham khảo để đó, bởi vì www là đầy đủ các văn bản giao diện java trước khi "@" Ngoài ra trong Java 1.5 (là nó trên 0,5 hoặc 0,4?)


EDIT

Cảm ơn câu trả lời (tôi đã bằng cách nào đó gần gũi với "chú thích", vì tôi sử dụng thẻ đã được): P

tôi biết tôi nên đã đọc rằng năm tài liệu trước !!! .. . le t's see ...

Nhiều API yêu cầu số tiền hợp lý của mã bản mẫu. Đối với ....

+2

Và không được nhầm lẫn với Java 8 phương thức giao diện mặc định: http://java.dzone.com/articles/interface-default-methods-java –

Trả lời

55

Bạn vừa viết annotation.

Riêng câu hỏi default: Điều này được sử dụng vì chú thích và giao diện không thể có hàm tạo, vì vậy đây là cách duy nhất để có giá trị mặc định cho thuộc tính chú thích. Từ số Java Language Specification:

Phần tử loại chú thích có thể có giá trị mặc định được chỉ định cho nó. Điều này được thực hiện bằng cách làm theo danh sách tham số (trống) của nó với từ khóa default và giá trị mặc định của phần tử.

Mặc định được áp dụng động vào thời điểm chú thích được đọc; giá trị mặc định không được biên dịch thành chú thích. Do đó, việc thay đổi giá trị mặc định sẽ ảnh hưởng đến chú thích ngay cả trong các lớp đã được biên dịch trước khi thay đổi được thực hiện (giả sử các chú thích này thiếu giá trị rõ ràng cho phần tử mặc định).

Tôi lưu ý rằng không có chú thích nào trong số java.lang.annotation sử dụng giá trị mặc định.


Cách sử dụng: Bạn có một chú thích @HelloWorld với một thuộc tính sayHello. Bạn có thể đặt nó trên một lớp học như thế này:

@HelloWorld(sayHello="Hi") 
public class MyClass { 
} 

Vì bạn có một giá trị mặc định, bạn chỉ có thể đặt

@HelloWorld 
public class MyClass { 
} 

(Lưu ý rằng các tài liệu nói, "Trong chú thích với một yếu tố duy nhất, các yếu tố nên được đặt tên là value "; Tôi tin rằng lý do duy nhất để làm điều này là bạn chỉ có thể viết @HelloWorld("Hi") mà không cần phải đặt tên cho tham số.)

Như đã viết, chú thích của bạn có thể được sử dụng trên bất kỳ phần tử chương trình hợp lệ nào (bao gồm các phương pháp và khai báo biến). Bạn có thể thay đổi điều này bằng chú thích @Target.

Cuối cùng, thiết lập RetentionPolicy cho phép bạn quyết định xem chú thích có nên bị loại bỏ bởi trình biên dịch, bị loại bỏ bởi máy ảo hay không.


Hai gói mà cũng có thể là thú vị: javax.annotationjavax.annotation.processing. Và here là một ví dụ về cách sử dụng xử lý chú thích để phân tích mã nguồn.

+1

+1: Cảm ơn bạn mmyers: Bạn có bất kỳ bản tóm tắt nào cho sự lười biếng này không lập trình viên? – OscarRyz

+0

Tóm tắt về những gì? Tất cả sử dụng chú thích? –

+1

Không, chỉ sử dụng @interface ... Tôi sẽ xem liên kết ... sau: -/ – OscarRyz

4

Đó là số annotation bạn tuyên bố không phải là giao diện. Nó đã được thêm vào trong Java 1.5.

+0

+1. Oh .. vâng, chú thích. Tôi nghĩ rằng tôi bỏ qua bài giảng cho những người khi tôi nói "Khi tôi cần tạo một công cụ xử lý chú thích, tôi sẽ đi đến đó" Hôm nay tôi đã xem mã nguồn Groovy và đó là điều đầu tiên làm tôi khó hiểu. – OscarRyz

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