Tag: 科特林

为什么试图访问常量值的问题没有解决?

该应用程序在Kotlin单例对象中定义常量: @file:JvmName(“APIConstants”) package com.myapp.api object APIConstants { const val HTTP_RESPONSE_CODE_NOT_AUTHORIZED = 401 etc…. } 然后他们被用于另一个class级: import com.myapp.api.APIConstants.HTTP_RESPONSE_CODE_NOT_AUTHORIZED etc … class API { private fun returnBadResponse(response: Response, callback: ApiAuthListener) { if (response.code() == HTTP_RESPONSE_CODE_NOT_AUTHORIZED) { callback.onBadAuthToken() } else { callback.onFailure(response.message(), getServerError(response)) } } 在这个类中,Android Studio(3.0 beta)提供了一个为常量添加导入的提示,并没有给出任何问题的指示(没有红色下划线等,方法中的常量引用以紫色斜体文本显示它已经解决了)但是当我建立这个项目时,我得到了这个: Error: Unresolved reference: HTTP_RESPONSE_CODE_NOT_AUTHORIZED 我已经尝试清除IDE缓存并重新启动它,并做一个干净的构建,这没有什么区别。 我已经尝试删除@JvmName注释,甚至将常量值放在没有包含对象的文件的根目录中,但是不允许构建。 为什么类没有引用这个常量,特别是当IDE强烈建议它可以解决这个问题的时候呢?

不能在Kotlinunit testing(ExecutionException,Aapt2Exception)

一个简单的测试… import org.junit.Test class KotlinUnitTest { @Test fun test() { assert(true) } } …结果如下… Information:Gradle: Executing tasks: [:app:assembleDebug, :app:assembleDebugUnitTest] Information:Kotlin: Kotlin JPS plugin is disabled Information:Module “app” was fully rebuilt due to project configuration/dependencies changes Information:06/12/2017 5:08 PM – Compilation completed with 3 errors and 0 warnings in 19s 962ms Error:Gradle: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 […]

‘when’语句跳过Android的Kotlin条件

我一直在使用kotlin在android studio canary 5上开发应用程序。 我正在使用when语句来validationregistry单是否有效。 else if(registering) when { email.text == null -> email.error = “Enter Email!” !isValidEmail(email.text) -> email.error = “Invalid Email!” password.text == null -> password.error = “Enter Password!” password_conf.text == null -> password_conf.error = “Re-enter Password!” password_conf.text.toString() != password.text.toString() -> password_conf.error = “Re-enter Password!” password_conf.text.toString() != password.text.toString() -> password_conf.error = “Passwords Don’t […]

将Kotlin的KClass转换为Java中的常规类

我正在尝试从Kotlin调用一个常规的Java方法,如下所示: public T proxy(KClass kClass) { // unfortunately nothing like getJavaClass() exists return (T) proxy(kClass.getJavaClass()); } public T proxy(Class jClass) { return (T) context.getBean(jClass); } 在Kotlin中,您可以在每个KClass上调用.java 。 这不是这种情况,我无法从KClass中提取Java类对象。 有没有办法做到这一点?

如何在Kotlin中获得generics参数类

Firebase的snapshot.getValue()预计将被调用,如下所示: snapshot?.getValue(Person::class.java) 不过,我想用一个通过类声明传递给类的generics参数替换Person DataQuery 并使用该generics参数来做这样的事情: snapshot?.getValue(T::class.java) 但是当我尝试,我得到一个错误说明 只有类可以用在类文字的左侧 是否有可能像在C#中的generics参数提供一个类的约束,还是有一些其他的语法,我可以用来获取generics参数的types信息?

是否可以将引用传递给基本数组的第i个元素?

现在,在我的代码中的某个地方,我传递了一个对原语的引用,例如一个Int val i = 0 至 fun whatever(i: KMutableProperty0) 如 whatever(::i) 能够从函数内部获取/设置其值 一切工作到目前为止。 现在我想要为基本数组的第i个元素(如IntArray相同的IntArray val arr = intArrayOf(1, 2, 3) whatever(/* passing the reference to item 2 of arr*/) 可能吗?

你能映射/减少一个字符串到一个Int?

我正在解决一个代码中的问题,我必须总结一个大数字(最多可以有10万位数字)的数字,我必须重复这个过程,直到只剩下一个数字,有一次,我做了这个,我想出了一个工作的解决方案,但是我想知道是否有些事情可以用更像“Kotlin-ish”的方式来完成,所以给出: fun main(args: Array) { println(transform(readLine()!!)) } fun transform(n: String): Int { var count = 0 var sum : Int var s = n while(s.length > 1) { sum = (0 until s.length).sumBy { s[it].toInt() – ‘0’.toInt() } s = sum.toString() count++ } return count } sum = (0 until s.length).sumBy { s[it].toInt() – ‘0’.toInt() […]

如何在Android的Activity中使用onItemLongClickListener?

我正在使用ItemClickSupport类,我想使用他们的长按听众,但我怎么知道它是否被点击很长? 可悲的是我没有find任何使用这个例子。 ItemClickSupport.addTo(recyclerView3).setOnItemLongClickListener { recyclerView, position, v -> true } 我该如何检查是否属实? 我如何获得被点击的位置? ItemClickSupport.java:gist /** * A class that adds item click support to a {@link RecyclerView}. * * @author Hugo Visser * @see * Getting your clicks on RecyclerView */ public class ItemClickSupport { private final RecyclerView recyclerView; private OnItemClickListener itemClickListener; private OnItemLongClickListener itemLongClickListener; private […]

Kotlin将hex字符串解析为长

我开始在Kotlin工作,我需要解析一个hex字符串到一个长,在Java中可以完成 Long.parseLong(“ED05265A”, 16); 虽然我可以find,但我在科特林找不到任何东西 val i = “2”.toLong() 这不是我正在寻找的! 在我从头开始写任何东西之前,有没有内置的函数?

通过动态分派委派派生类方法

鉴于下面的情况,哪里有一些基类应该简单地委托给派生类,那么为什么派生类中的两个apply()方法永远不会被调用? 为了演示:在main函数中,我将调用两个事件来apply 。 在抽象类中,我将apply这两个事件。 在基类中有一个通用的apply(Event)函数,但是它应该被忽略,并且通过动态调度去派生类中的apply(EventOne)和apply(EventTwo)方法。 我也尝试过每个单独的apply方法返回自己,而applyFromHistory函数使用fold来代替,但得到了相同的结果。 fun main(args: Array) { val subject = SomeAggregate() subject.applyFromHistory(listOf( EventOne(123), EventTwo(“foobar”) )) } sealed class Event data class EventOne(val id: Int) : Event() data class EventTwo(val content: String) : Event() abstract class AggregateRoot( private val events : MutableList = mutableListOf() ) { fun applyFromHistory(history: List) { history.forEach { apply(it) […]