kotlin限定符注释被忽略

下面的代码编译第一​​次,但在第二次构建给出: 错误:SomeObject绑定多次: @Provides @NotNull SomeObject SomeModule.provideSomeObject() @Provides @NotNull SomeObject SomeModule.provideSomeScopedObject() 看起来,编译器忽略了连续构建中的Qualifier注释。 当组件和模块在java中被编写时没有帮助,因为在Main类中注释被忽略。 @dagger.Component(modules = arrayOf(SomeModule::class)) interface Component { fun inject(main: Main) } class Main { @field:[javax.inject.Inject SomeScope] lateinit var obj: SomeObject } @dagger.Module class SomeModule { @dagger.Provides fun provideSomeObject(): SomeObject { return SomeObject(“noScope”) } @SomeScope @dagger.Provides fun provideSomeScopedObject(): SomeObject { return SomeObject(“someScope”) } } data […]

Android Kotlin – 如何使java builder setter方法

所以我已经阅读了这篇文章,但我不认为它完全是我想要的。 我有一个匕首通过构造函数注入为我创建的对象。 让我们开始在java中看起来像: public class AlgoliaSearchUsecase extends BaseUseCase { private final Index algoliaIndex; private final SearchRepository searchRepository; String query; int pageNum; @Inject public AlgoliaSearchUsecase(Index algoliaIndex, SearchRepository searchRepository, LoginRepository loginRepository) { super(loginRepository); this.algoliaIndex = algoliaIndex; this.searchRepository = searchRepository; } @Override protected Observable buildUseCaseObservable() { return searchRepository.fetchAlgoliaSearchResults(query,algoliaIndex,pageNum); } //***THESE TWO SETTERS ARE KEY TO MY QUESTION ********** […]

Kotlin如果不是空的

什么是最简洁的方式使用iff var不是null ? 我能想到的最好的是: arg?.let { with(it) { }}

如何在Kotlin中重命名属性的后台字段

编辑 :我知道关于支持属性,他们将涵盖大多数使用情况。 我不是在寻找解决办法,我特别关注是否有办法来命名支持领域。 您可以轻松地重命名属性的getter和setter,如下所示 @get:JvmName(“getFancy”) @set:JvmName(“setFancy”) var fancyProperty = … 但我不知道如何更改后台字段的名称,即使使用@field目标。 @field:JvmName(“fancy”) var fancyProperty = … 以上给出了一个错误: 此注解不适用于目标’具有后台字段的成员属性’,并使用站点目标’@field’ 最终我要做的是与JavaFX进行互操作。 当定义一个JavaFX属性时,通常遵循以下标准(使用一些额外的代码来使其懒惰): private ObjectProperty color = new SimpleObjectProperty(this, “color”, DEFAULT_COLOR); public ObjectProperty colorProperty() { return color; } public Color getColor() { return colorProperty.get(); } public void setColor(Color color) { colorProperty().set(color); } 所以我要做的是这样的(尽管@field显然不起作用): @field:JvmName(“color”) @get:JvmName(“colorProperty”) val colorProperty: ObjectProperty […]

关闭/隐藏kotlin中的SoftinputKeyboard

我有一个按钮和edittext。 当用户在edittext中完成输入并按下按钮时,我想关闭我的软键盘。 或者任何指南或参考链接。

什么是最好的方式kotlin空对象的toString()方法返回一个空字符串,而不是“空”

根据官方的kotlin文档,null对象的toString()调用返回“null” toString() 我想,toString()应该返回一个空字符串(“”)。 我用扩展function实现了它。 fun Any?.toEmptyStringIfNull() :String { if (this == null) { return “” } else { return toString() } 我想知道这是否可以实现更简单/更容易/更清洁,而不必每次调用扩展function。

为什么Kotlin不使用`List(…)`作为所有抽象集合的列表和类似约定的工厂?

在Scala中,使用伴侣对象的apply方法通过伴侣对象提供了一个收集工厂方法。 所以,如果我想用元素1,2和3创建一个列表,我只需要使用List(1, 2, 3) 。 该模式在所有集合types中都是一致的。 在Kotlin中,如果我写List(1, 2, 3)我会得到一个编译错误。 要创建一个列表1,2和3,必须使用listOf(1, 2, 3) 。 List是一个接口,所以显然没有构造函数。 可能有一个伴侣对象,但没有一个。 有一个List函数,虽然签名不同于人们期望来自Scala( public inline fun List(size: Int, init: (index: Int) -> T): List )的签名。 那么,为什么Kotlincollections品库设计师选择不遵循与Scala类似的collections品工厂的统一惯例?

Enum和在Kotlin

无论我的语法是错误的,或者你不能用于应用enum常量。 IntelliJ说这是因为RegexOption没有伴随对象,而且RegexOption needs to be initialized here 。 我不认为你可以实例化一个枚举。 // this works: val RX_OPTIONS = mapOf( ‘c’ to RegexOption.COMMENTS, ‘d’ to RegexOption.DOT_MATCHES_ALL, ‘e’ to RegexOption.CANON_EQ, ‘i’ to RegexOption.IGNORE_CASE, ‘l’ to RegexOption.LITERAL, ‘m’ to RegexOption.MULTILINE, ‘u’ to RegexOption.UNIX_LINES ) // this doesn’t work: val RX_OPTIONS2 = with(RegexOption) { mapOf( ‘c’ to COMMENTS, ‘d’ to DOT_MATCHES_ALL, ‘e’ […]

如何在实现Java接口时克服“相同的JVM签名”错误?

用下面的代码,我得到了IntelliJ IDEA 13.1.6和Kotlin插件0.11.91.AndroidStudio.3中的以下错误: Platform declaration clash: The following declarations have the same JVM signature (getName()Ljava/lang/String;): • public open fun getName(): kotlin.String? • internal final fun (): kotlin.String? Java类, JavaInterface.java : public interface JavaInterface { public String getName(); } Kotlin类, KotlinClass.kt public class KotlinClass(val name: String?) : JavaInterface 我试着通过添加override fun getName(): String? = name来override fun getName(): […]

确保kotlin方法是静态的,顶级的或注释的@JvmStatic

如何将main声明为static,以便该方法按照以下方式运行(交互式): thufir@dur:~/kotlin$ thufir@dur:~/kotlin$ kotlinc Welcome to Kotlin version 1.1.51 (JRE 9.0.0.15+181) Type :help for help, :quit for quit >>> >>> println(“hello world”); WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.intellij.util.text.StringFactory to constructor java.lang.String(char[],boolean) WARNING: Please consider reporting this to the maintainers of com.intellij.util.text.StringFactory WARNING: Use –illegal-access=warn to enable warnings […]