Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 API设计:一个通用接口与三个专用接口?_Java_Oop_Interface_Api Design - Fatal编程技术网

Java API设计:一个通用接口与三个专用接口?

Java API设计:一个通用接口与三个专用接口?,java,oop,interface,api-design,Java,Oop,Interface,Api Design,我正在开发一个工具,用户可以使用自己的注释来描述数据处理工作流(如验证、转换等) 除了使用现成的注释外,用户还可以使用自己的注释:为了做到这一点,他们需要声明注释类本身,然后实现注释处理器(我将创建第一个更通用的接口,然后定义三个不同的实现类。在不知道如何使用它的情况下,我的第一反应是定义接口和/或基类(取决于不同处理器之间共享了多少通用实现代码),然后在派生类型中添加专用处理器实现,所有派生类型共享公共接口 在使用API时,我希望声明一个实现GenericAnnotationProcessor

我正在开发一个工具,用户可以使用自己的注释来描述数据处理工作流(如验证、转换等)


除了使用现成的注释外,用户还可以使用自己的注释:为了做到这一点,他们需要声明注释类本身,然后实现注释处理器(我将创建第一个更通用的接口,然后定义三个不同的实现类。在不知道如何使用它的情况下,我的第一反应是定义接口和/或基类(取决于不同处理器之间共享了多少通用实现代码),然后在派生类型中添加专用处理器实现,所有派生类型共享公共接口

在使用API时,我希望声明一个实现GenericAnnotationProcessor的变量,然后根据需要分配适当的实现类型

这是早期在波特兰,或者,但在这一刻,在我所需的咖啡因水平的50%,这似乎在我看来,它将提供最大的灵活性,同时最大限度地重复使用cade

当然,你的实际需求可能会决定其他方面


希望这会有帮助!

只是深入研究你的问题

由于他们正在执行类似的任务,但存在一些差异,因此应该会对您有所帮助

您的问题应该如下所示

interface GenericAnnotationProcessor {    
    Object processAnnotation(Annotation annotation, Object processedValue);
}

interface ProducerAnnotationProcessor implements GenericAnnotationProcessor {
}

interface TransformerAnnotationProcessor implements GenericAnnotationProcessor {
}

interface ConsumerAnnotationProcessor implements GenericAnnotationProcessor {
}
现在,您可以从Wiki中学习这个示例

class Context {

    // map of annotation processors

    // register(add/remove) annotation processors to the map

    public int executeAnnotationProcessor(Annotation annotation, Object processedValue) {
        return locateAnnotationProcessor(annotation).processAnnotation(annotation, processedValue);
    }

    private GenericAnnotationProcessor locateAnnotationProcessor(Annotation annotation) {
        // return expected annotation processor
    }
}

我相信你能理解。

你可以使用接口扩展接口

与类类似,您可以使用extends关键字建立接口的继承层次结构,如中所示:

interface Washable {
    void wash();
}

interface Soakable extends Washable {
    void soak();
}
在本例中,interface Soakable扩展了interface Washable。因此,Soakable继承了Washable的所有成员。实现Soakable的类必须为Soakable、wash()和Sugger()中声明或继承的所有方法提供主体,或者声明为抽象。请注意,只有接口才能“扩展”其他接口。类不能扩展接口,只能实现接口

希望能有帮助

interface GenericAnnotationProcessor {    
    Object processAnnotation(Annotation annotation, Object processedValue);
}

interface ProducerAnnotationProcessor implements GenericAnnotationProcessor {
}

interface TransformerAnnotationProcessor implements GenericAnnotationProcessor {
}

interface ConsumerAnnotationProcessor implements GenericAnnotationProcessor {
}
class Context {

    // map of annotation processors

    // register(add/remove) annotation processors to the map

    public int executeAnnotationProcessor(Annotation annotation, Object processedValue) {
        return locateAnnotationProcessor(annotation).processAnnotation(annotation, processedValue);
    }

    private GenericAnnotationProcessor locateAnnotationProcessor(Annotation annotation) {
        // return expected annotation processor
    }
}
interface Washable {
    void wash();
}

interface Soakable extends Washable {
    void soak();
}