小编s1m*_*nw1的帖子

范围函数适用于/ with/run/also/let:名称来自哪里?

有相当多的博客文章(像这样)的标准库的用途功能apply/ with/ run/ also/ let可用,使它更容易一点distingish时实际使用的这那些漂亮的功能.

几个星期以来,官方文档甚至最终提供了关于该主题的指导:https://kotlinlang.org/docs/reference/coding-conventions.html#using-scope-functions-applywithrunalsolet

不过,我认为这是相当困难的记忆功能的个人使用的情况下,函数名.我的意思是,对我来说,它们似乎是可以互换的,为什么不let被称为run例如?

有什么建议?我认为这些名字不是很有表现力,这使得一开始很难看出差异.

lambda scoping higher-order-functions kotlin

12
推荐指数
3
解决办法
837
查看次数

落在Kotlin:切换/什么时候没有休息

我是kotlin的新手,我想做一个没有"休息"的开关.在java中会是这样的:

    switch (b){
        case 3:
            Log.d("int", "3");
        case 2:
            Log.d("int", "2");
        case 1:
            Log.d("int", "1");
    }
Run Code Online (Sandbox Code Playgroud)

如果b = 2那么它将打印:

D/int:2

D/int:1

我想在Kotlin中做到这一点,而不是为每个案例重复相同的代码.在kotlin转换器中,代码输出是:

when (b) {
  3 -> {
    Log.d("int", "3")
    Log.d("int", "2")
    Log.d("int", "1")
  }
  2 -> {
    Log.d("int", "2")
    Log.d("int", "1")
  }
  1 -> Log.d("int", "1")
}
Run Code Online (Sandbox Code Playgroud)

还有另一种方法吗?我的实际代码比那个大;

java android kotlin

11
推荐指数
0
解决办法
1905
查看次数

如何创建Kotlin DSL - DSL语法Kotlin

anko一样,你可以写这样的回调函数:

alert {
    title = ""
    message = ""
    yesButton {
       toast("Yes") 
    }
    noButton { 
       toast("No")
    }
}
Run Code Online (Sandbox Code Playgroud)

我该如何创建这样的嵌套函数?我尝试像下面那样创建它,但似乎没有工作.

class Test {
    fun f1(function: () -> Unit) {}
    fun f2(function: () -> Unit) {}
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我用扩展功能,

fun Context.temp(function: Test.() -> Unit) {
    function.onSuccess() // doesn't work
}
Run Code Online (Sandbox Code Playgroud)

从活动中调用此内容:

temp {
    onSuccess {
        toast("Hello")
    }
}
Run Code Online (Sandbox Code Playgroud)

不行.我在这里仍然缺乏一些基本概念.谁能在这里指导?

android kotlin anko kotlin-extension

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

Kotlin:null不能是非null类型kotlin的值

如何ArrayList在Kotlin中分配空值?

我想尝试将null值添加到我的自定义ArrayList

var mList = ArrayList<CustomClass>()
mList.add(null)
Run Code Online (Sandbox Code Playgroud)

在java中它可能但我怎样才能在Kotlin中实现这一点?我正进入(状态

null不能是非null类型kotlin的值

我需要插入null值以在RecyclerView中加载更多功能

android arraylist kotlin android-recyclerview

10
推荐指数
2
解决办法
6125
查看次数

Kotlin和Java String之间的区别与Regex分开

如果我们有一个val txt: kotlin.String = "1;2;3;"并且喜欢将它拆分成数组,我们可以尝试以下方法:

val numbers = string.split(";".toRegex())
//gives: [1, 2, 3, ]
Run Code Online (Sandbox Code Playgroud)

尾随空String包含在结果中CharSequence.split.

另一方面,如果我们看一下Java String,结果是不同的:

val numbers2 = (string as java.lang.String).split(";")
//gives: [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

这次使用时java.lang.String.split,结果不包括尾随空String.这个行为实际上是给定相应的JavaDoc:

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样.因此,结尾的空字符串不包含在结果数组中.

在科特林的版本,虽然,0也就是默认limit的文件的说法在这里,但内部科特林地图,0负的值-1时,java.util.regex.Pattern::split称为:

nativePattern.split(input, if (limit == 0) -1 else limit).asList()
Run Code Online (Sandbox Code Playgroud)

它似乎按预期工作但我想知道为什么该语言似乎限制Java API,因为0不再提供限制.

java regex string kotlin

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

科特林的平等

我正在学习Kotlin,具有C++和Java背景.我期待以下打印true,而不是false.我知道==那张地图equals.是否默认实现equals比不上每个成员,即firstNamelastName?如果是这样,它不会看到字符串值相等(因为再次==映射equal)?显然,有一些与平等和身份相关的东西,我还没有在Kotlin中找到.

class MyPerson(val firstName: String, val lastName: String)

fun main(args: Array<String>) {
   println(MyPerson("Charlie", "Parker") == MyPerson("Charlie", "Parker"))
}
Run Code Online (Sandbox Code Playgroud)

java equality operator-overloading operators kotlin

8
推荐指数
3
解决办法
5043
查看次数

检查Kotlin中when语句中的数组大小和列表大小

我是Kotlin的新手和编程.我非常喜欢模式匹配的想法,正如您在下面的代码中看到的那样,我正在尝试使用when语句.

fun main(args: Array<String>) {


    val myAr = arrayOf(1,2,3)
    val myL = listOf(1,2,3)

    fun probablyBlind() {

       when(myL.size != myAr.size) {

          myL.size > myAr.size -> {
            println("myL.size > myAr.size = ${myL.size > myAr.size}")
          }
          myL.size < myAr.size -> myAr.forEach { println(it) }
      }

      if(myL.size != myAr.size) {
        println("Inside if. myL.size > myAr.size = 
        ${myL.size > myAr.size}")
      }
   }

   probablyBlind()
 }
Run Code Online (Sandbox Code Playgroud)

如果您运行代码,结果是:

myL.size > myAr.size = false
Run Code Online (Sandbox Code Playgroud)

这意味着在某些时候列表的大小与数组的大小不同.然后它在when语句中计算为true的第一个比较.但后来打印出来的是虚假的.这意味着它不应该运行这部分代码.if语句永远不会计算为true.

有人可以帮我这个吗?也许这是我目前无法看到的非常简单的事情.如果是这样的话,请原谅.

java kotlin

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

是否可以在Kotlin中为现有类添加接口?

有时,创建已由现有第三方代码(即来自库)实现的接口很有用.例如,我们可以想象选择String类的方法的子集并声明a GenericString.然后我们可以定义GenericString实现这些方法的其他方法,但不能定义String该类的其他方法.唯一的问题是String该类不会从GenericString类继承.是否可以在Kotlin中为现有类添加接口,还是必须创建String实现此接口的子类?

inheritance interface kotlin

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

只在Kotlin中返回null的函数

是否可以声明一个只返回的函数null?不幸的是,你不能null在返回类型部分写.返回值应该是null而不是Unit,以便它可以与可空操作符一起使用.

kotlin

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

Kotlin从其他类调用成员扩展函数

我想在多个类中使用此函数:

fun <T> T?.ifNull(function: (T?, s:String) -> Unit) {
}
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?

这就是我想用它的方式:

class A{
fun <T> T?.ifNull(function: (T?, s:String) -> Unit) {
    }
}

class B{
constructor(){
    val a = A()
    //I want to use the function here
}}
Run Code Online (Sandbox Code Playgroud)

android kotlin

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