Có, as mentioned by yegor256, có thể, kể từ JDK 8 adopted JSR 308 (type annotations).
Vì vậy, bây giờ bất cứ khi nào một chú thích được trang trí bởi @Target({ElementType.TYPE_USE})
, nó có thể được sử dụng để chú thích một lớp ẩn danh khi chạy. Ví dụ:
@Target({ ElementType.TYPE_USE })
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
String value();
}
Object o = new @MyAnnotation("Hello") Object() {};
Phần khó là làm thế nào để truy cập vào các chú thích:
Class<?> c = o.getClass();
AnnotatedType type = c.getAnnotatedSuperclass();
System.out.println(Arrays.toString(type.getAnnotations()));
Nguồn
2016-11-24 19:37:02
Lớp "thích hợp" thậm chí có thể được xác định trong phương pháp này, do đó phạm vi của nó là địa phương để các phương pháp và thiết kế tương tự, nó vẫn là một chi tiết thực hiện nội bộ của phương thức. – amichair
Nếu bạn ngạc nhiên bởi mô tả của @ amichair về các lớp học địa phương (như tôi) lưu ý rằng nó là mới đối với JDK8 và các tài liệu ở đây: https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses. html –
Rõ ràng các lớp địa phương đã có từ Java 1.1 ... nhưng chúng vẫn đáng ngạc nhiên :-) – amichair