Java 如何使用表示带注释类型的类型参数声明接口
使用我的自定义批注:Java 如何使用表示带注释类型的类型参数声明接口,java,java-8,Java,Java 8,使用我的自定义批注: @Inherited @Target({ElementType.TYPE, ElementType.TYPE_PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface EntityDomain { } 我的目标是声明一个接口,类型参数必须是用@EntityDomain注释的类型 例如: @EntityDomain public class Person implements Serializabl
@Inherited
@Target({ElementType.TYPE, ElementType.TYPE_PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface EntityDomain {
}
我的目标是声明一个接口,类型参数
必须是用@EntityDomain
注释的类型
例如:
@EntityDomain
public class Person implements Serializable {
我做了一项研究:
@FunctionalInterface
public interface EntityRetrievalForPersistence<@EntityDomain T> {
T getEntity();
}
@functioninterface
公共接口EntityRetrievalForPersistence{
T getEntity();
}
但是缺少了一些内容,因为编译了以下内容:
public enum StringTest implements EntityRetrievalForPersistence<String>{
A("A"),
B("B");
private String x;
private StringTest(String x) {
this.x = x;
}
@Override
public String getEntity() {
// TODO Auto-generated method stub
return null;
}
}
公共枚举StringTest实现EntityRetrievalForPersistence{
A(“A”),
B(“B”);
私有字符串x;
私有字符串测试(字符串x){
这个.x=x;
}
@凌驾
公共字符串getEntity(){
//TODO自动生成的方法存根
返回null;
}
}
由于@EntityDomain
什么是正确的配置?注释没有约束,您需要使用反射获取该值,如果需要,在运行时抛出异常。或者,您可以实现自己的类型检查器,强制执行此类自定义约束,即定义类似于
接口EntityRetrievalForPersistence的内容{ … }
。另一方面,为什么?你从中得到了什么,或者没有它会失去什么?它如何影响处理EntityRetrievalForPersistence
实例的代码,类型参数上的注释是否存在?很有趣。我认为这是一个有效的方案。我可以建议另一种解决方案吗?为什么不直接使用>EntityDomain
标记接口,并且做:公共接口EntityRetrievalForPersistence
?注释可以比真正的Java类型更强大。但是,如果常规Java类型足以满足您的需要,您应该使用它。请参阅。注释没有约束,您需要使用反射和必要时在运行时抛出异常或者,您可以实现自己的类型检查器来强制执行这样的自定义约束,即定义类似interface EntityRetrievalForPersistence{…}
。另一方面,为什么?你从中得到了什么,或者没有它会失去什么?它如何影响处理EntityRetrievalForPersistence
实例的代码,类型参数上的注释是否存在?很有趣。我认为这是一个有效的方案。我可以建议另一种解决方案吗?为什么不直接使用>EntityDomain
标记接口,并且做:公共接口EntityRetrievalForPersistence
?注释可以比真正的Java类型更强大。但是,如果常规Java类型足以满足您的需要,您应该使用它。请参阅。