我一直想知道为什么android支持库使用注释?
我已经实现了一些常见的android库,如ButterKnife,Retrofit。但是,我看到了这些中的一种常见行为。他们使用注释来提供功能。我想知道为什么他们没有使用某些方法或接口来实现他们提供的功能,在这些上使用注释有什么优势吗?
我一直想知道为什么android支持库使用注释?
我已经实现了一些常见的android库,如ButterKnife,Retrofit。但是我看到了这些中的一种常见行为。他们使用注释来提供功能。
ButterKnife或Retrofit使用的默认注释和特定注释有不同的用途。像@Override
,@NonNull
,@StringRes
,@IntRes
等默认注释是告诉编译器有关代码的特定约束的一种方法。
ButterKnife中的@BindView
或@OnClick
等特定注释用于代码生成。 ButterKnife Annotation处理器将查找所有匹配的注释,并根据注释作为规则生成代码。
我想知道为什么他们没有使用某些方法或接口来实现他们提供的功能,在这些上使用注释是否有任何好处?
它们可以像您所说的那样提供功能,但通常使用在性能方面成本高且难以维护的反射来实现,有关详细信息,请参阅https://softwareengineering.stackexchange.com/questions/101187/are-there-problems-with-using-reflection的更多详细信息。因此使用代码生成。
注释主要用于通知编译器有关某些操作。像:@Override注释将通知编译器检查此方法是否被覆盖。编译器将监视条件是完全填充还是会抛出异常。