Trường hợp sử dụng hợp lệ để triển khai chú thích là gì?Các trường hợp sử dụng để thực hiện chú thích
Khi thiết kế chủ yếu các hệ thống định cấu hình dựa trên chú thích, đôi khi tôi cần phải tạo các lớp triển khai chú thích để tạo mã hoặc lập trình cấu hình.
Cách thay thế liên quan đến việc phản chiếu dữ liệu chứa trong chú thích vào DTO, điều này có vẻ giống như chi phí.
Dưới đây là một ví dụ:
public enum IDType {
LOCAL,
URI,
RESOURCE;
}
@Documented
@Target({ METHOD, FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Id {
/**
* @return
*/
IDType value() default IDType.LOCAL;
}
với việc thực hiện
public class IdImpl implements Id{
private final IDType idType;
public IdImpl(IDType idType){
this.idType = idType;
}
@Override
public IDType value() {
return idType;
}
@Override
public Class<? extends Annotation> annotationType() {
return Id.class;
}
}
tôi nhận được cảnh báo trình biên dịch cho điều này, nhưng nó có vẻ là một công cụ có giá trị cho nhiều trường hợp sử dụng.
Cảnh báo ví dụ ở trên là
Loại chú thích Id không nên sử dụng như một superinterface cho IdImpl
được sửa đổi:
Tôi chỉ tìm thấy ví dụ này từ Guice :
bind(CreditCardProcessor.class)
.annotatedWith(Names.named("Checkout"))
.to(CheckoutCreditCardProcessor.class);
Xem trang này Javadoc from Names.
Có ai biết một số thông tin tại sao hạn chế này tồn tại hoặc có một số trường hợp sử dụng khác trong đầu không?
Bạn nhận được cảnh báo nào? – djna
@djina: Vâng, một xu cho mỗi lần bạn phải nói điều đó và bạn sẽ giàu có. Nó không bao giờ hết ngạc nhiên tôi. – musiKk
Có lẽ nó chỉ là tôi nhưng nó có vẻ liên quan chặt chẽ đến câu hỏi này: http: // stackoverflow.com/questions/1624084/tại sao-là-không-thể-để-mở rộng-chú thích-trong-java –