在Kotlin的字符串模板中使用下划线(“_”)

在Kotlin中,我试图创建一个动态文件名,其中包含一个types和一个如下所示的日期: var filename = “ab_$type_$date.dat” 但是,variables之间的第二个下划线会导致编译错误: Kotlin:未解决的参考:name_ 我知道我可以用旧的方式连接字符串: var filename = “ab_” + type + “_$date.dat” 但我想知道是否有不同的方式来完成同样的事情。 有没有办法转义字符串模板中的特殊字符或任何其他方式来得到这个工作?

修复一些Kotlin语法

我刚刚用Java构建了一个简单的Android音乐应用程序,然后使用Android Studio的Kotlin插件将这些Java文件转换为Kotlin。 MainActivity.kt中有一些错误 private fun display() { val mySongs = findSong(Environment.getExternalStorageDirectory()) items = arrayOf(mySongs.size.toString()) for (i in mySongs.indices) { items[i] = mySongs[i].name.toString().replace(“.mp3”, “”).replace(“.wav”, “”) } val adp = ArrayAdapter(this, android.R.layout.simple_list_item_1, items!!) listView!!.adapter = adp listView!!.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, position, l -> startActivity(Intent(applicationContext, PlayerActivity::class.java).putExtra(“pos”, position).putExtra(“songs”, mySongs)) } } 这行: items[i] = mySongs[i].name.toString().replace(“.mp3″,””).replace(“.wav”, “”) 显示错误: […]

当Kotlin函数不采用可空types时,正确的方法是什么?

所以我正在解决Koans问题,并通过我过于复杂的解决方案碰到一个困扰我的东西。 我在可空types上使用Int.compareTo()函数。 如果第一个是可空的,这是“容易的”,因为我只写: val a : Int? = 1 val b : Int = 1 a?.compareTo(b) 但是,如果b是可以空的,那么我不能使它工作,也许我错过了什么地方? 那么在这种情况下该怎么办? val a : Int? = 1 val b : Int? = 2 a?.compareTo(b) 我得到一个语法错误说:“下面的函数都不能用提供的参数调用。” 但是,当我介绍这个: val a : Int? = 1 val b : Int? = 2 val x : Int = b ?: 0; o1?.compareTo(x) 它的作品,但它感觉不是这样做的正确方法。 […]

科特林阅读只有属性和无吸气

这些是否相同? val foo = someFooReturningFunction() val foo get() = someFooReturningFunction() 我理解他们的文档的方式,但在我自己的测试中,他们不是。 每次访问属性get() someFooReturningFunction()被评估,没有它只被评估一次。

在Kotlin中满足条件时,最干净的方法来重新分配variables的值

比方说,我有一些方法递减的Longvariables。 我想将其设置为60后减到0.我尝试应用函数 private var tempTime = interval.apply { if (this.equals(0L)) tempTime = interval } 但它甚至不是正确的语法。 tempTime是我的variables,它会减少, interval是我想在tempTime达到0之后设置的默认值。另外,有没有什么办法可以避免这个丑陋的, if equals 0L语句?

Kotlin数据类拷贝方法不是深拷贝所有成员

有人可以解释Kotlin数据类的copy方法是如何工作的吗? 对于一些成员来说,(深)副本似乎并没有真正创建,而且引用仍然是原来的。 fun test() { val bar = Bar(0) val foo = Foo(5, bar, mutableListOf(1, 2, 3)) println(“foo : $foo”) val barCopy = bar.copy() val fooCopy = foo.copy() foo.a = 10 bar.x = 2 foo.list.add(4) println(“foo : $foo”) println(“fooCopy: $fooCopy”) println(“barCopy: $barCopy”) } data class Foo(var a: Int, val bar: Bar, val list: MutableList = […]

Kotlin – 函数的调用操作符重载

我正在学习Kotlin – 运算符重载 我想了解(例如)运算符重载如何为函数的invoke()函数工作 预先测试 Kotlin的扩展函数 fun exampleOfExtensionFunction() { fun Int.randomize(): Int { return Random(this.toLong()).nextInt() } val randomizedFive = 5.randomize() println(“$randomizedFive”) } 打印: -1157408321 在Kotlin中,函数可以用types声明为variables fun exampleOfFunctionType() { val printNumber: (number: Int) -> Unit printNumber = { number -> println(“[$number = ${number.toString(16).toUpperCase()} = ${number.toString(2)}]”) } printNumber(1023) } 打印: [1023 = 3FF = 1111111111] Kotlin允许运算符用扩展和成员函数重载 fun […]

Int和Integer在Kotlin上有什么区别?

我曾尝试在Kotlin中使用Int和Integertypes。虽然我没有看到任何区别。 Kotlin中Int和Integertypes有区别吗?还是它们是一样的?

将parameter passing给kotlin中的自定义getter

我一直在阅读关于Kotlin的物业 ,包括习惯的获得者和制定者。 但是,我想知道是否有可能创建一个具有额外参数的自定义getter。 例如,在Java中考虑以下方法: public String getDisplayedValue(Context context) { if (PrefUtils.useImperialUnits(context)) { // return stuff } else { // return other stuff } } 请注意, PrefUtils中的静态方法必须将Context作为参数,因此不能删除此选项。 我想在Kotlin中这样写: val displayedValue: String get(context: Context) { return if (PrefUtils.useImperialUnits(context)) { // stuff } else { // other stuff } } 但是我的IDE以红色突出显示了所有这一切。 我知道我可以在我的类中创建一个函数来获取显示的值,但是这意味着我将不得不在Kotlin中使用.getDisplayedValue(Context) ,而不是能够通过名称来引用属性,如.displayedValue 。 有没有办法像这样创建一个自定义的getter? 编辑:如果没有,最好为此写一个函数,或将Context传递给类构造函数的参数?

如何将数字字符(0-9)转换为数字值?

Char.toInt()返回字符的ASCII码,而不是数字值。 那么如何将Char转换为具有正确数值的整数呢?