将 Java 代码转换为 Kotlin 以实现 OnChangeListener 时遇到问题

Posted

技术标签:

【中文标题】将 Java 代码转换为 Kotlin 以实现 OnChangeListener 时遇到问题【英文标题】:Trouble converting Java code to Kotlin to implement an OnChangeListener 【发布时间】:2019-03-03 14:02:23 【问题描述】:

我有这段代码来实现 Range Bar 库的监听器:

rangebar.setOnRangeBarChangeListener(new RangeBar.OnRangeBarChangeListener() 
        @Override
        public void onRangeChangeListener(RangeBar rangeBar, int leftPinIndex,
                                          int rightPinIndex, String leftPinValue, String rightPinValue) 
        

    );

现在我尝试通过以下方式将其导入并更改为 kotlin:

rangebar.setOnRangeBarChangeListener(object: RangeBar.OnRangeBarChangeListener 
        override fun onRangeChangeListener(rangeBar:RangeBar, leftPinIndex:Int,
                                  rightPinIndex:Int, leftPinValue:String, rightPinValue:String) 
            textView.text = "$leftPinIndex"
        
    )

rangebar.setOnRangeBarChangeListener  rangeBar, leftPinIndex, 
rightPinIndex, leftPinValue, rightPinValue -> 
textView.text = "$leftPinIndex" 

在这两种情况下,应用都会崩溃并出现以下错误:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void com.appyvet.materialrangebar.RangeBar.setOnRangeBarChangeListener> (com.appyvet.materialrangebar.RangeBar$OnRangeBarChangeListener)”

我做错了什么?

【问题讨论】:

您的rangebar 对象为空 你的听众很好。阅读错误信息。 【参考方案1】:

您的 rangebarnull

为避免崩溃,请像这样使用:

rangebar?.setOnRangeBarChangeListener(object: RangeBar.OnRangeBarChangeListener 
    override fun onRangeChangeListener(rangeBar:RangeBar, leftPinIndex:Int, rightPinIndex:Int, leftPinValue:String, rightPinValue:String) 
        textView.text = "$leftPinIndex"
    
)

rangebar?.setOnRangeBarChangeListener  rangeBar, leftPinIndex, rightPinIndex, leftPinValue, rightPinValue -> 
    textView.text = "$leftPinIndex" 

【讨论】:

以上是关于将 Java 代码转换为 Kotlin 以实现 OnChangeListener 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

将代码从Java更改为Kotlin后,注释未正确转换

如何将 Java 源文件的一部分转换为 Kotlin?

如何将此 Java 代码转换为 kotlin 代码

Kevin Learn Kotlin:Java & Kotlin

将 Kotlin 转换为 Java

如何在IntelliJ IDEA中禁用“粘贴时将Java转换为Kotlin”?