`
chelsea
  • 浏览: 119377 次
  • 来自: ...
社区版块
存档分类
最新评论

Annotation PK Interface

    博客分类:
 
阅读更多

Interface在OO中处于核心地位,针对接口编程更是OOP的核心原则之一,但即使将该原则贯彻到底的COM/CORBA,依然面对大量的依赖、耦合,牵一接口而动全部客户的修改

另一方面,Hurb Sutter说各种编程范式,包括面向对象,核心都是某种管理依赖性,降低依赖性的技术,那么.Net Attribute, XDoclet, Java Annotation代表的Attribute Oriented Programming在降低依赖性上又前进了多少呢?

以Java Annotation为例,与Java Interface做个对比

1,调用方式

实现Interface的类 被Annotation标注的类
Call by Signature:就像现实生活中的螺丝螺母,插座插头,必须完全吻合 Call by Semantics:就像卡西利亚斯被罚下,临时指定肥罗当守门员一样,肥罗并不需要实现GateKeeper接口,只需临时被标记为具有GateKeeper属性,便可以合法的禁区内手球

2,名称冲突(可看作是对函数签名的依赖,当然,无论Annotation还是Interface,都不允许存在完全相同的全名)

实现Interface的类 被Annotation标注的类
Yes,无法解决从多个接口继承来的方法具有相同签名不同语义的问题 No,Annotation是类型,不会存在完全相同的全名

3,编译时依赖(对Annotation或Interface的依赖)

Annotation Interface 被Annotation标注的类 使用了Annotation的客户 不使用Annotation的客户 实现Interface的类 使用Interface的客户 不使用Interface的客户
Yes Yes No,只要“被Annotation标注的类”已经被编译为bytecode,如以jar包的形式存在,那么使用了该类,但没有用到Annotation的客户,编译时不需要依赖Annotation所在的Jar包 Yes Yes Yes,即使客户没有用到该类所实现的所有接口,编译时该类涉及的所有接口的定义必须可见

4,运行时依赖(对Annotation或Interface的依赖)

Annotation Interface 被Annotation标注的类 使用了Annotation的客户 不使用Annotation的客户 实现Interface的类 使用Interface的客户 不使用Interface的客户
No(即使RetentionPolicy是RUNTIME,我的测试中也是不依赖Annotation的,只要客户不涉及Annotation,但我不确定RUNTIME的真正含义是什么) Yes No(其实运行时对Annotation的依赖被转移到了客户) Yes Yes Yes

5,对Annotation或Interface本身更改的依赖

Annotation Interface 被Annotation标注的类 使用了Annotation的客户 不使用Annotation的客户 实现Interface的类 使用Interface的客户 不使用Interface的客户
Yes Yes No Yes Yes No

6,对“被Annotation标注的类不再被标注”或“实现Interface的类不再实现Interface”这类更改的依赖

Annotation Interface 被Annotation标注的类 使用了Annotation的客户 不使用Annotation的客户 实现Interface的类 使用Interface的客户 不使用Interface的客户
Yes No No Yes Yes No

 

总共 5 处被蓝色字体标注的地方,也就是Annotation在降低依赖性上优于Interface的 5 个方面,也算更接近于“你不需要为你用不到的东西付出代价”这一语言和库的设计理念

当然,Annotation有其它的代价,几个潜在的可能就是“使用方便性”和“性能”

分享到:
评论

相关推荐

    Annotation手册

    在Java中,通过`@interface`关键字声明Annotation类型,其中的成员变量是固定的,没有方法参数。当我们通过反射API访问Annotation时,会得到实现该接口的对象,从而获取成员信息。 4. **标准Annotation**:Java 5.0...

    Annotation技术

    自定义Annotation通过使用`@interface`关键字来创建。 Annotation类型可以包含成员,这些成员通常是没有参数的方法,其返回类型限制为基本类型、字符串、Class、枚举、Annotation或它们的数组。成员可以有默认值。...

    annotation

    @interface CustomAnnotation { String value(); } public class AnnotationTest { @CustomAnnotation(value = "Test") public void annotatedMethod() { // ... } public static void main(String[] args) ...

    jakarta.annotation-api-1.3.5-API文档-中文版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...

    Annotation注解的介绍和使用

    ### Annotation注解的深入解析与应用 #### 一、Annotation概览 ##### 1.1 何为元数据 元数据,在计算机科学中,是指用于描述数据的数据,它提供了关于数据本身的附加信息,有助于理解、解释和管理数据。在编程...

    Annotation详细介绍(大全)

    Annotation的定义格式通常为`public @interface AnnotationName { attributes }`,其中`attributes`是Annotation的属性,可以包含零个或多个方法,这些方法代表了Annotation的参数。 2. **使用Annotation**: 在...

    javax.annotation-api-1.2-API文档-中文版.zip

    赠送jar包:javax.annotation-api-1.2.jar; 赠送原API文档:javax.annotation-api-1.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-1.2.pom;...

    用Annotation简化Java程序的开发(PDF)

    public @interface MyAnnotation { String value() default ""; } ``` 这里定义了一个名为`MyAnnotation`的Annotation类型,其中包含一个名为`value`的成员,其默认值为空字符串。开发者可以根据实际需求定义更多...

    JDK5.0 Java Annotation 介绍(ppt)

    Java Annotation 是 JDK5.0 引入的一种元数据机制,它允许程序员在代码中嵌入额外的信息,这些信息可以被编译器、构建工具或运行时系统用来执行特定的任务。Annotation 提供了一种安全、灵活的方式来描述代码的属性...

    jakarta.annotation-api-1.3.5-API文档-中英对照版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...

    javax.annotation-api-1.3.2-API文档-中文版.zip

    赠送jar包:javax.annotation-api-1.3.2.jar; 赠送原API文档:javax.annotation-api-1.3.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.3.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-...

    annotation-1.1.0.jar

    @androidx.annotation.NonNull 缺失的兼容、androidx.annotation兼容包

    annotation的jar包

    javax.annotation-3.0.jar javax.annotation-3.0.jar javax.annotation-3.0.jar

    annotation详解

    【标题】:注解(Annotation)详解 注解(Annotation)是Java编程语言中的一个重要特性,自Java 5版本引入,它提供了一种安全的方法来将元数据与代码关联。元数据是关于数据的数据,可以用来提供程序的额外信息,如...

    自定义的Annotation

    在iOS开发中,Annotation是苹果地图(MapKit)框架中的一个重要概念,用于在地图上添加可视化标记,以展示特定地理位置的信息。自定义的Annotation则允许开发者根据需求个性化地图上的标注,比如添加图片、自定义...

    什么是Annotation?

    Annotation的定义类似于接口的定义,但前面需要加上`@interface`关键字。下面是一个简单的例子: ```java @Retention(RetentionPolicy.RUNTIME) // 指定注解的保留策略 @Target(ElementType.METHOD) // 指定...

Global site tag (gtag.js) - Google Analytics