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();
}