Tag: kotlin extension

Android Studio和Kotlin:未解决的参考:也

也从Android Studio编译并运行: val greeted = "World".also { println("Hello $it") } 然而,编辑also强调, it是错误的,不要给intellisense任何帮助。 申请仍然有效,当我去源时,我可以看到既apply also定义。 我如何让Android Studio also能识别? Android Studio 2.3.3 kotlin_version ='1.1.3-2' Kotlin插件1.1.3-release-Studio2.3-2 我也有早期版本的这个问题。

在android java类中使用Kotlin扩展

是否有可能在android java类中使用kotlin扩展? 例: fun String.getSomething(): String { return "something" } 那么在Java中使用它就像: String someString = "blabla"; someString.getSomething(); 这可能吗?

受保护的成员无法通过扩展功能访问?

Kotlin具有几个可见性修饰符以及扩展功能 。 该文档指出Extensions are resolved statically 。 但是这对于扩展函数中的类成员的可见性意味着什么呢? 我们来考虑下面这个人为的例子: class A { protected val a = "Foo" } fun A.ext() { print(a) } //Raises: Cannot access 'a': it is 'protected' in 'A' class B { val b = "Bar" } fun B.ext() { print(b) } //Compiles successful 代码不会编译。 看来受保护的成员在扩展课程时是不可访问的。 所以静态解析意味着扩展函数是在Java中具有类似这样的语法糖: public static void ext(A receiver){ […]

如何在返回Any时保留智能铸件的对象类型

道歉,如果这是一个愚蠢的问题,科特林对我来说还是新的,我不熟悉语法“类型”,所以发现它很难找到解决方案。 fun Any?.test(): Any? { return this } "test string".test() // implicit string is now type of "Any" "test string".test().substring() // what i'm trying to achieve 我基本上希望类扩展方法返回自己的实例,所以我仍然可以按照示例的底线操作它 请原谅这个例子的粗俗,简化了下来

如何在Kotlin中创建一个在类上运行的扩展函数?

试想一下,我有这样的代码行: import org.mockito.Mockito val mock = Mockito.mock(Sim2ParametersProvider::class.java) 我想能够这样写: val mock = Sim2ParametersProvider::class.mock() 我如何做到这一点? 我试过了 fun <T : kotlin.Any> kotlin.reflect.KClass<T>.mock() = Mockito.mock(this) 但它给我编译错误。

在扩展功能中修改“this”

我想编写修改“this”的扩展函数,例如: var a = false a.toggle() // now a contains false 要么 var a = 1 a.increment() // now a contains 2 Kotlin有可能吗? 我可以创建返回修改值的扩展函数,但留下“这个”未经修改,但我想要更多的方便! 它看起来像Swift可以做到这一点。

意外覆盖:以下声明具有相同的JVM签名

我在这部分收到了Kotlin的这个错误: class GitHubRepoAdapter(private val context: Context, private val values: List<GithubRepo>) : ArrayAdapter<GithubRepo>(context, R.layout.list_item, values) { 私有val上下文:上下文 在日志中说: 错误:(14,25)意外覆盖:以下声明具有相同的JVM签名(getContext()Landroid / content / Context;):fun():上下文fun getContext():Context! 我无法看到造成问题的原因。

在V1.0.1中不能识别Kotlin扩展属性

重新访问Kotlin 1.0.1以前版本的一些代码,看起来我的扩展属性不再有效。 事实上,它仍然存在,但我不能再覆盖它。 考虑这个类: class TestClass { override val loggerName: String get() = "A new name" fun aMethod() { info("test info message") } } Pre Kotlin 1.0.1这将工作,如果你有以下扩展: val Any.loggerName: String get() = javaClass.simpleName!! fun Any.info(message: String) { //… } loggerName将默认采用有问题的实例的类名称。 目前,在这种情况下,loggerName被正确地分配给TestClass ,但是我不能覆盖它。 这是Kotlin新版本中的一个意外错误还是一个新的限制? 我已经搜索Kotlin – 扩展,但只发现它应该工作。 技术 : 我正在使用Kotlin插件版本1.0.1-release-IJ143-32在IntelliJ IDEA 2016.1中进行测试。 编辑1: TestClass甚至不能识别这个属性,但是当访问TestClass的一个实例(例如: instanceOfTestClass.loggerName )时,它是被识别的。

如何扩展Kotlin Number类或使用泛型来创建一个简单的属性getter,它将在所有的Nu​​mber子类上运行?

我想通过构建非常简单的方法和扩展内置类的属性获取器来了解Kotlin抽象类扩展和泛型的更多信息。 我主要是成功的,但是我被数字类难住了。 我的测试属性Number.sgn旨在返回Number的任何子类的符号(1或-1作为Int)。 为了简单起见,负数应该返回-1,而正数和0应该返回1.我对这个方法的用例不是特别感兴趣,但是为了理解如何写这样简单的东西 – 以及为什么我的代码生成错误它。 我的模块中唯一的导入是kotlin.text.*并且我收到的错误消息确实指向那里的冲突。 我只是不明白为什么它会发生冲突,以及如何克服它 – 虽然我猜这是一个新手的错误。 我首先写了代码来扩展Int类,它工作正常: inline val Int.sgn get() = if (this<0) -1 else 1 // sign of number 然后,我试图将其推广到Number类,如下所示: inline val Number.sgn get() = if (this<0) -1 else 1 // doesn't compile 编译错误如下: unresolved reference. None of the following candidates is applicable because of receiver type mismatch: public […]

意外的令牌(使用;在同一行上分隔表达式)

当我试图在Kotlin中编写一行代码时,我想我搞砸了,看起来没有问题,但是IntelliJ在这里给了我这个错误: val cards : Array<Card> = Array(52 { i -> Card(i % 13, getSuit(i))})