android - Kotlin 注释处理会忽略名称相似的项目

标签 android annotations kotlin dagger butterknife

我最近将我的大部分项目转换为 kotlin。现在我遇到了几个似乎都与注释库有关的异常错误。不用说,这在 Java 中没有发生。

我将描述这些案例 - 一个在 Dagger 中,一个在 Butterknife 中。

1。 在具有相同名称的不同模型中具有 2 个 @Provides 方法时。 例如在具有“provideFooOrBar”方法的文件“FooProvider.kt”中

@Module
class FooProvider(private val view: FooActivity) {
    ... 
    @Provides @FooScope fun provideView() = view
    @Provides @FooScope fun provideFooOrBar() = Foo()
}

还有另一个具有相同方法名称的文件“BarProvider.kt”

@Module
class BarProvider(private val view: BarActivity) {
    ...
    @Provides @BarScope fun provideView() = view
    @Provides @BarScope fun provideFooOrBar() = Bar()
}

在这种情况下,Dagger 无法生成一些工厂库,并且出现以下编译错误: Error:(27, 32) error: 找不到符号类 FooProvider_ProvideFooOrBarFactory

可以在 https://github.com/maxandron/DaggerIssue325 找到重现该问题的示例项目

2。 这是使用 Butterknife 时的一个问题。当在两个不同的类中有两个 @Bind 带注释的变量时 - 其中一个在运行时无法初始化而没有任何编译错误!

例如,如果我有:

class FooActivity {
    @Bind(R.id.foo) lateinit var mFoo: View
}
class NotFooActivity {
    @Bind(R.id.not_foo) lateinit var mFoo: View
}

然后其中一个(或两者?)将无法初始化而没有任何错误。导致访问字段时抛出kotlin.UninitializedPropertyAccessException: lateinit property mFoo has not been initialized异常。


是我在配置 Kotlin 时做错了什么还是 kotlin 错误?

提前感谢您! 罗恩

最佳答案

我遇到了这个问题,所以我开始调查,这是因为 Kapt is only checking the method name比较它们时,and they are added in a set ,因此不允许重复。带注释的字段也是如此,因此目前每个注释可以有一个方法/字段名称。

我在 equals 方法中添加了类名,并且注释现在得到了正确处理,但是测试失败了,我不知道它们是如何工作的,所以我希望有人知道如何解决这个问题.

关于android - Kotlin 注释处理会忽略名称相似的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35633761/

相关文章:

ios - 这个 Objective-C/XCode 注释是什么//[START_EXCLUDE]

scala - 我需要在 Scala 中使用 @tailrec 吗?

android - 如果从协程调用非挂起函数会发生什么?

android - 为什么会出现错误: Can't find a no-arg constructor for class com. example.son.kotlinandroiddemo.db.dao.M_Data?

java - 图像在 ImageView 中不可见

inflate-method 中的 Android ViewBinding 错误 - 依赖项缺失或冲突

android - 从应用程序转到相机拍照并存储在数据库的列中

android - 为什么谷歌地图相机不在我的位置?

java - 随着应用程序的增长,Struts 2 验证无法正常工作

kotlin - Map withDefault 无法在 kotlin 中工作?