Tag: kotlin extension

Kotlin List尾巴功能

我正在尝试在List<T>找到一个尾部函数,但是我找不到任何东西。 我结束了这样做。 fun <T> List<T>.tail() = this.takeLast(this.size -1) 有没有更好的方法来做到这一点?

“接收器对象”和“扩展接收器”有什么区别吗?

很难根据文档https://kotlinlang.org/docs/reference/extensions.html 所以我想知道接收器对象和扩展接收器是一样的吗? 或名称取决于上下文?

如何创建像anko – DSL语法Kotlin嵌套函数回调

和anko一样,你可以这样编写回调函数: alert { title = "" message = "" yesButton { toast("Yes") } noButton { toast("No") } } 我怎样才能创建一个这样的嵌套功能? 我试图创建它像下面,但似乎并没有工作。 class Test { fun f1(function: () -> Unit) {} fun f2(function: () -> Unit) {} } 现在,如果我用这个扩展功能, fun Context.temp(function: Test.() -> Unit) { function.onSuccess() // doesn't work } 从Activity调用它: temp { onSuccess { toast("Hello") } […]

我可以通过功能参数发送扩展功能吗?

下面我有一些扩展函数的功能。 fun EditText.setEmailValidationListener(): TextWatcher { val textWatcher = object : TextWatcher { override fun beforeTextChanged(text: CharSequence?, start: Int, count: Int, after: Int) { } override fun onTextChanged(text: CharSequence?, start: Int, before: Int, count: Int) { } override fun afterTextChanged(text: Editable?) { validateEmail() } private fun validateEmail(): Boolean { if (validateEmailFormat(showError = false)) { getParentInputLayout()?.isErrorEnabled = […]

枚举数的扩展函数,`values()`不可用?

如果我尝试键入: enum class EGraphicsAPIConvention(@get:JvmName("i") val i: Int) { API_DirectX(0), API_OpenGL(1) } fun EGraphicsAPIConvention.of(i: Int) = values().first { it.i == i } 编译器抱怨: 未解决的参考值 this.values()也没有帮助 为什么我没有values()可用?

如何用toString扩展一个数据类

我已经创建了一个数据类 data class Something ( val a : String, val b : Object, val c : String ) 后来在我的程序中,我需要这个数据类的字符串表示,我试图扩展toString方法。 override fun Something.toString() : String = a + b.result() + c 这里的问题是,它不允许扩展(覆盖)toString函数,因为它不适用于顶级函数。 如何正确覆盖/扩展自定义数据类的toString方法?

点击一个文本视图来改变片段

我正在尝试使用Kotlin构建我的第一个Android应用程序,但是我陷入了一个非常简单的情况。 我正在使用Kotlin android扩展,我得到一个空指针异常。 <TextView android:id="@+id/tvGoToRegisterFrag" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/btn_sign_in" android:text="@string/haven_t_registered_yet" android:paddingTop="10dp" android:textColor="@color/colorAccent" android:layout_centerHorizontal="true"/> 用这个我用了 tvGoToRegisterFrag.setOnClickListener { goToRegister() } 我知道我可以使用 tvGoToRegisterFrag?.setOnClickListener { goToRegister() } 为了摆脱崩溃,但我仍然不知道为什么对象是空的,点击时不做任何事情。 所有这些都是在片段中完成的,如果这改变了任何东西。

Out-projected type'ArrayList <*>'禁止使用'public open fun add(index:Int,element:E):java.util.ArrayList'

我有这个片段: class RecyclerViewAdapter internal constructor( val clazz: Class<out RecyclerViewViewHolder>, val layout: Int, var dataList: MutableList<*>) … … … fun RecyclerView.getDataList() : ArrayList<*> { return (adapter as RecyclerViewAdapter).dataList as ArrayList<*> } … … … 那么我使用这个: recyclerView.getDataList().add(Person("Lem Adane", "41 years old", 0)) 但我得到这个错误: Error:(19, 31) Out-projected type 'ArrayList<*>' prohibits the use of 'public open fun add(index: Int, […]

不可空的可变映射

Java: 1.8.0_102 Kotlin: 1.0.4 我试图创建一个地图,你可以做一些像map["key"] += 5类似于JavaScript。 Kotlin已经在withDefault情况下解决了这个问题的一部分,但是map的get函数仍然返回一个可以为空的值,所以我开始用withDefault interface NonNullableMutableMap<K,V> : MutableMap<K,V> { override fun put(key: K, value: V): V override fun get(key: K): V } fun <K,V> MutableMap<K,V>.withoutNullValues(default: () -> V): NonNullableMutableMap<K, V> { return NonNullableMapWrapper(this, default) } class NonNullableMapWrapper<K,V>(val map: MutableMap<K,V>, val default: () -> V) : NonNullableMutableMap<K,V> { override fun put(key: K, […]

在kotlin中,如何返回由泛型类参数定义的实例

我正在努力为kotlin 1.0.3写一个很好的Kotlin包装器。 在这个我试图混入一个函数的请求,让它通过使用杰克逊的JSON转换返回一个bean。 所以在我的图书馆我有以下 private val mapper: ObjectMapper = ObjectMapper().registerModule(KotlinModule()) fun <T : Any> Request.asDataBean(type: KClass<T>): T = mapper.readValue(this.body(), type.java) 但是当我转而使用代码时, post("/hello", { req, res -> val bean = req.asDataBean(TestBean::class) }) 它错误地说,豆的期望值是任何。 我想要的是我的API的工作方式与上面一样,传递给asDataBean方法的泛型“类”定义是返回值的类型。 我也试过了 fun <T> Request.asDataBean(type: KClass<*>): T = mapper.readValue(this.body(), type.java) as T 以及将使用代码更改为 val bean: TestBean = req.asDataBean(TestBean::class) 希望能够正常工作,但是在使用代码时也给出了完全相同的错误。 我如何得到它使用传入的类类型定义的泛型作为参数(非常类似于所有在Java中的spring api的工作)?