gpt4 book ai didi

kotlin - 空指针异常与 map 一起使用(Kotlin)

转载 作者:行者123 更新时间:2023-12-02 13:24:34 25 4
gpt4 key购买 nike

我有以下类(class):

class SymbolTable(){
var map = mutableMapOf<String, Entry>()
var kindCounter = mutableMapOf<String, Int>()

fun define(name:String, kind:String, type:String){
if(kindCounter[kind]==0){
kindCounter[kind]=0
}
var index = 1
map[name]= Entry(type, kind, index)
kindCounter[kind]=kindCounter[kind]!!.plus(1)
}

类Entry看起来像这样:
class Entry(var type:String, var kind:String, var index:Int)

主要:
fun main(args:Array<String>){
var example = SymbolTable()
example.define("ex1", "ex1", "ex1")
example.define("ex2", "ex2", "ex2")
}

当我运行程序并尝试使用“定义”功能时,出现以下错误:
Exception in thread "main" kotlin.KotlinNullPointerException
at SymbolTable.define(SymbolTable.kt:21)
at SymbolTableKt.main(SymbolTable.kt:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

我认为问题与我如何创建新的symbolTable类有关,但是由于Kotlin没有“new”,我不知道如何避免空指针异常。

最佳答案

if(kindCounter[kind]==0){
kindCounter[kind]=0
}

这没有多大意义:您测试该值是否为0,如果为0,则将其设置为0。因此,它基本上是noop。

您想要测试值是否为空:
if (kindCounter[kind] == null) {
kindCounter[kind] = 0
}

您还可以通过将值保存到变量中来避免使用危险的 !!运算符。

而且您应该真正使用val而不是var:您的所有字段都不应是可变的:
class SymbolTable() {
val map = mutableMapOf<String, Entry>()
val kindCounter = mutableMapOf<String, Int>()

fun define(name: String, kind: String, type: String) {
val count = kindCounter[kind] ?: 0
map[name] = Entry(type, kind, 1)
kindCounter[kind] = count + 1
}
}

class Entry(val type: String, val kind: String, val index: Int)

fun main(args:Array<String>) {
val example = SymbolTable()
example.define("ex1", "ex1", "ex1")
example.define("ex2", "ex2", "ex2")
}

关于kotlin - 空指针异常与 map 一起使用(Kotlin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37639524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com