【发布时间】:2016-06-17 21:40:41
【问题描述】:
如果使用泛型,我能否在编译时检查类是否包含特定注解?
我正在创建一个包装类,它将作为对各种 HTTP 调用的响应。
我想要的是这个包装类允许用户传入任何类型的对象,该对象使用我自己的注释进行注释。
例如,我的包装类可以如下:
public class HTTPResponse<T> {
private HttpStatus status;
private int statusCode;
private T data;
public HTTPResponse(HttpStatus status, T data) {
this.status = status;
this.statusCode = status.value();
this.data = data;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
//other getters/setters
}
在使用这个类时,我可以创建一个新的 HTTPResponse 对象并声明“数据”字段的类型:
HTTPResponse<SomePOJO> response = new HTTPResponse<>(HttpStatus.OK, new SomePOJO());
这个想法是任何尝试使用这个类的人都可以在构建过程中传入他们自己的自定义 POJO。但是,我希望能够检查在构造过程中传入的对象是否使用我创建的自定义接口进行了注释。
例如,我的 SomePOJO 类需要如下所示:
@MyCustomInterface
public class SomePOJO() {
//code stuff here
}
有没有办法在编译期间检查 SomePOJO 类是否被 @MyCustomInterface 注释?
我知道我可以标记我的注释,以便它在运行时可用,然后在 HTTPResponse 类的构造函数中执行检查。但我真的希望我的班级的用户尽快(在编译期间)知道他们还没有用正确的接口标记他们的 POJO,因此需要在创建 HTTPResponse 对象之前这样做。
在这种情况下,注释甚至是正确的方法吗?在编译期间以某种方式检查类注释是否 100% 不可能,我应该强制用户实现我的自定义接口然后指定
HTTPResponse with public class HttpResponse<T implements MyCustomInterface> {
//fields, getters, setters
}
感谢您阅读,如果您设法做到了这一点!
【问题讨论】:
标签: java generics compilation annotations