标签: extension-function

Kotlin扩展功能

考虑到这一点:

MyView.setVisibility(View.VISIBLE)
Run Code Online (Sandbox Code Playgroud)

可简化为:

inline fun View.setVisible() = apply { visibility = View.VISIBLE }

MyView.setVisible()
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以这样:

inline infix fun View.vis(vis: Int) = apply { visibility = vis }
MyView vis View.VISIBLE
Run Code Online (Sandbox Code Playgroud)

无论如何通过这样做完成相同的事情:

MyView.VISIBLE
Run Code Online (Sandbox Code Playgroud)

android kotlin extension-function

2
推荐指数
1
解决办法
362
查看次数

从 Kotlin 中的另一个类访问静态扩展函数?

假设我们有以下扩展函数:

class Helper {
  companion object {
    fun Int.plus(value: String) = Integer.valueOf(value).plus(this)
  }
Run Code Online (Sandbox Code Playgroud)

}

如何plusHelper另一个类中的类访问扩展函数。有没有办法让我们可以做这样的事情,例如:

class OtherClass {
  fun someMethod() {
    val eight = 7.Helper.Companion.plus("1")
  }
Run Code Online (Sandbox Code Playgroud)

}

android kotlin extension-function

2
推荐指数
1
解决办法
687
查看次数

Kotlin - 使扩展功能在整个项目中可访问

我在一个类中有这个扩展函数:

fun Double.round2() : Double {
   return Math.round((this) * 100.0) / 100.0
}
Run Code Online (Sandbox Code Playgroud)

我想在另一个类中重用这个函数,而不需要重复代码。我该怎么做?谢谢。

kotlin extension-function

2
推荐指数
1
解决办法
687
查看次数

从Kotlin的地图中过滤空键和值

我有一个扩展功能,可以过滤掉具有空键或空值的条目:

fun <K, V> Map<K?, V?>.filterNotNull(): Map<K, V> = this.mapNotNull { 
   it.key?.let { key -> 
      it.value?.let { value -> 
         key to value 
      }
   }
}.toMap()
Run Code Online (Sandbox Code Playgroud)

这适用于具有可空键和值的地图:

data class Stuff(val foo: Int)

val nullMap = mapOf<String?, Stuff?>(null to (Stuff(1)), "b" to null, "c" to Stuff(3))
assert(nullMap.filterNotNull().map { it.value.foo } == listOf(3))
Run Code Online (Sandbox Code Playgroud)

但不能包含非空键或值的值:

val nullValues = mapOf<String, Stuff?>("a" to null, "b" to Stuff(3))    
assert(nullValues.filterNotNull().map { it.value.foo } == listOf(3))

Type mismatch: inferred type is Map<String, Stuff?> but Map<String?, Stuff?> was expected
Type …
Run Code Online (Sandbox Code Playgroud)

generics kotlin extension-function

2
推荐指数
1
解决办法
79
查看次数

Kotlin-Val无法重新分配,但是可以通过从索引访问来重新分配?

我在尝试修改元素的地方有这两个功能。其中一个进行编译,其他则说“不能重新分配val”。以下功能有什么区别?为什么一个编译而另一个不编译?

编译的

fun <T> Array<T>.mapInPlace2(transform: (T) -> T) {
for (i in this.indices) {
    this[i] = transform(this[i])
}
}
Run Code Online (Sandbox Code Playgroud)

那个说

Val无法重新分配

fun <T> Array<T>.mapInPlace1(transform: (T) -> T) {
for (i in this) {
    i = transform(i);
}
}
Run Code Online (Sandbox Code Playgroud)

arrays kotlin extension-function

1
推荐指数
1
解决办法
1871
查看次数

在kotlin上更改@的名字

我有以下情况,一个名为savefrom 的扩展函数Marker

1.代码

fun Marker.save(ctx: Context) {
    //database is an extension property from Context
    ctx.database.use {
        insert("markers",
                "id" to this@save.id,
                "latitude" to this@save.position.latitude,
                "longitude" to this@save.position.longitude,
                "name" to this@save.title)
    }
}
Run Code Online (Sandbox Code Playgroud)

代码对我来说很好.

2.问题

要使用我需要使用的Markerinside save方法的实例this@save,但是这个名字不是sugestive,在第一个视图中,它看起来不像Marker.

3.问题

是否可以使用别名来代替使用this@save

非常感谢!

android alias kotlin extension-function

1
推荐指数
1
解决办法
410
查看次数

使用扩展功能将String中的每个单词大写

我想在Kotlin中创建扩展功能,该功能将字符串的每个单词的首字母转换为大写

the quick brown fox
Run Code Online (Sandbox Code Playgroud)

The Quick Brown Fox
Run Code Online (Sandbox Code Playgroud)

我尝试使用该capitalize()方法。那只是大写的第一个字母String

string function kotlin extension-function

1
推荐指数
5
解决办法
2459
查看次数

扩展方法在 Kotlin 中是如何工作的?

在 Java 中,您不能扩展 final 类,但在 Kotlin 中,您可以为此类 final 类编写扩展方法。他们是如何在内部运作的?我找不到任何解释 Kotlin 扩展方法内部工作原理的文章。

kotlin extension-function

1
推荐指数
2
解决办法
754
查看次数

有没有办法在Intellij IDE中显示给定Kotlin类的所有扩展函数?

到目前为止,我找到的唯一方法是创建给定类的实例,然后使用自动完成功能查看所有可能的函数.显然,这种方式很麻烦,需要花费太多时间.是否有更简洁的方式来查看所有可能的功能?

intellij-idea kotlin extension-function

0
推荐指数
1
解决办法
411
查看次数

访问修饰符对扩展功能有什么影响?

如果将扩展功能的访问修饰符更改为,将会发生什么private?有效果吗?有关系吗?!

private fun String.myExtensionFunction() { // ... }

extension-methods function access-modifiers kotlin extension-function

0
推荐指数
1
解决办法
39
查看次数