考虑到这一点:
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) 假设我们有以下扩展函数:
class Helper {
companion object {
fun Int.plus(value: String) = Integer.valueOf(value).plus(this)
}
Run Code Online (Sandbox Code Playgroud)
}
如何plus从Helper另一个类中的类访问扩展函数。有没有办法让我们可以做这样的事情,例如:
class OtherClass {
fun someMethod() {
val eight = 7.Helper.Companion.plus("1")
}
Run Code Online (Sandbox Code Playgroud)
}
我在一个类中有这个扩展函数:
fun Double.round2() : Double {
return Math.round((this) * 100.0) / 100.0
}
Run Code Online (Sandbox Code Playgroud)
我想在另一个类中重用这个函数,而不需要重复代码。我该怎么做?谢谢。
我有一个扩展功能,可以过滤掉具有空键或空值的条目:
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) 我在尝试修改元素的地方有这两个功能。其中一个进行编译,其他则说“不能重新分配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) 我有以下情况,一个名为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?
非常感谢!
我想在Kotlin中创建扩展功能,该功能将字符串的每个单词的首字母转换为大写
the quick brown fox
Run Code Online (Sandbox Code Playgroud)
至
The Quick Brown Fox
Run Code Online (Sandbox Code Playgroud)
我尝试使用该capitalize()方法。那只是大写的第一个字母String。
在 Java 中,您不能扩展 final 类,但在 Kotlin 中,您可以为此类 final 类编写扩展方法。他们是如何在内部运作的?我找不到任何解释 Kotlin 扩展方法内部工作原理的文章。
到目前为止,我找到的唯一方法是创建给定类的实例,然后使用自动完成功能查看所有可能的函数.显然,这种方式很麻烦,需要花费太多时间.是否有更简洁的方式来查看所有可能的功能?
如果将扩展功能的访问修饰符更改为,将会发生什么private?有效果吗?有关系吗?!
private fun String.myExtensionFunction() { // ... }
extension-methods function access-modifiers kotlin extension-function