Недавно я перевел большую часть своего проекта на kotlin. Теперь я столкнулся с несколькими необычными ошибками, которые, похоже, связаны с библиотеками аннотаций. Излишне говорить, что этого не произошло в Java.
Я опишу кейсы - один в Кинжале и один в Баттернайфе.
1. При наличии 2 методов @Provides
в разных моделях с одинаковыми именами. Например, в файле «FooProvider.kt» есть метод «provideFooOrBar».
@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: cannot find symbol class 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?
Заранее спасибо! Рон
open class
) вместо окончательного? Я бы подумал, что это не сработает в Java, именно в этом случае, потому что разницы нет. Ваша проблема со свойствами МОЖЕТ быть связана с целью аннотации, но я думаю, что в этом другом случае вы или ошибка кинжала - person Jayson Minard   schedule 25.02.2016src/main/kotlin
в вашей градации, но затем вы поместили свой исходный код вsrc/main/java
, это проблема? - person Jayson Minard   schedule 25.02.2016