一般来说,annotation 可以在 compile time 或是 runtime 的时候做处理。
在这两者各有优缺点,annotation processor 虽然可以在 runtime 的时候直接进行 parse ,省下不少读取 annotation 和爬结构的时间,但缺点就是 compile 的时候会比较久。相反地,runtime 透过 proxy 或 reflection 的方式去爬资料,虽然不用花 compile 的时间,但 runtime 会花时间处理 annotation 和资料结构。之前在实作的时候,我们有做实验,也有权衡了一下这两者之前的优劣,後来选择了 annotation processor ,因为 podcast 满多的格式档案都满大的,而且 tag 多种又复杂,靠 runtime 处理实在是会花很多时间在处理结构,Android 开发常用的 gson 和 Retrofit 就是在 runtime 处理 annotation 。
// Retrofit
interface GitHubService {
@GET("users/{user}/repos")
suspend fun listRepos(@Path("user") user: String)
}
另一个有趣的是,如果你是 Android 的开发者应该对於 dagger 这个 library 不陌生,他们有提供一些 annotation 让使用者来自订一些东西,像是 @Inject
、 @Component
或者 @Provides
之类的,这背後就是在 compile time 就已经决定好要帮你产生哪些 dependency injection 会用的 class 。而我们的目标就是要可以做到类似的效果,透过自定义的 annotation 去产生对应的 parser ,让我们不用自己写程序码,也可以达到自定义资料格式和 parser 的效果。
// Dagger
@Provides
fun provideUserRepository(): UserRepository {
return UserRepository()
}
<<: D14-(9/14)-台泥(1101)-全台湾第一号股票
接续昨日的动作,将SD卡插到Raspberry Pi後插电开机,这时如果有接萤幕会出现开机进度 如果...
我们在上一篇的Show.html 已经完成了资料查询呈现 这里要多出操作(比方像是编辑、删除...)...
Toast元件可以短暂的在画面跳出提示讯息,并且不会影响Activity处理程序,当达到短暂秒数後便...
介面 介面(interface)是JAVA所提供的另一项重要功能,它的结构和抽象类别非常相似。介面本...
如何正确选择高防服务呢?首选是高防CDN。那麽它具备哪些优势呢? 高防CDN的优势 CDN即内容...