Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用表示带注释类型的类型参数声明接口_Java_Java 8 - Fatal编程技术网

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类型足以满足您的需要,您应该使用它。请参阅。