kotlin中使用Java接口,报错Parameter specified as non-null is null

本文详细阐述了在Kotlin中使用Java接口时遇到的‘NullPointerException’问题,重点在于onDragMoveNodesHit方法接收null参数导致的崩溃。通过添加@Nullable注解并调整接口实现,解决了这个问题并给出了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简述

kotlin中使用Java接口,报错Parameter specified as non-null is null

问题
2021-07-06 09:33:35.053 2317-2317/com.lqbs.piot E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.lqbs.piot, PID: 2317
    java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter hittingNode
原因分析

有一个接口TreeViewControlListener.class

public interface TreeViewControlListener {
    int MIN_SCALE  = -1;
    int FREE_SCALE = 0;
    int MAX_SCALE  = 1;
    void onScaling(int state, int percent);
    void onDragMoveNodesHit(NodeModel<?> draggingNode,NodeModel<?> hittingNode,View draggingView,View hittingView);
}

对应实现

binding!!.baseTreeView.setTreeViewControlListener(object : TreeViewControlListener {
            override fun onScaling(state: Int, percent: Int) {
				...
            }

            override fun onDragMoveNodesHit(
                draggingNode: NodeModel<*>,
                hittingNode: NodeModel<*>,
                draggingView: View,
                hittingView: View
            ) {
               ...
            }
        })

当在java中调用’onDragMoveNodesHit’方法传入null参数时,会crash。如下

if(listener!=null){
    listener.onDragMoveNodesHit(draggingNode,null,draggingView,null);
}
解决方案

首先,在java接口中添加@Nullable注解,这样在自动生成Kotlin实现接口代码时,就会可空,所以改为如下

TreeViewControlListener.class

public interface TreeViewControlListener {
    int MIN_SCALE  = -1;
    int FREE_SCALE = 0;
    int MAX_SCALE  = 1;
    void onScaling(int state, int percent);
    void onDragMoveNodesHit(@Nullable NodeModel<?> draggingNode, @Nullable NodeModel<?> hittingNode, @Nullable View draggingView, @Nullable View hittingView);
}

根据实际情况,实现接口代码,添加?表示可空

override fun onDragMoveNodesHit(
    draggingNode: NodeModel<*>?,
    hittingNode: NodeModel<*>?,
    draggingView: View?,
    hittingView: View?
) {
    ....
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值