java—当方法肯定是类的一部分时获取*nosuchmethodexception*

fhity93d  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(360)

我有以下课程:

class CountryDataItem (
    id: Long?, 
    private val countryName :String?, 
    private var countryFlagUrl : String?,
    var gameCount : Int,  
    var liveCount:Int
) : BaseDataItem(id) {

    companion object {

        fun onCreateViewHolder(
            parent: ViewGroup,
            onRecyclerItemClickListener: OnRecyclerItemClickListener?
        ): RecyclerView.ViewHolder {
            val view: View =
                LayoutInflater.from(parent.context).inflate(R.layout.country_item, parent, false);
        }
    }
}

但在跑步时:

someKClass.java.getMethod(
    "onCreateViewHolder",
    parent.javaClass,
    onRecyclerItemClickListenerRef.get()?.javaClass
)

我有个例外。我不明白为什么我甚至使用方法:getmethods来获得一个包含类中所有方法的名称的列表,并且该方法存在。这意味着我发送了一个错误的参数(但无法找出什么是错误的)附件列表:

附加信息:我发送给getmethod的第二个参数是一个weakreference,它在他内部隐藏了一个allscoresfragment类型的示例,并且还实现了RecyclerItemClickListener上的接口,但是当我运行getmethod方法时:

onRecyclerItemClickListenerRef.get()?.javaClass

,结果是allscoresfragment类型,而不是onrecycleritemclicklistener类型。因此,他找不到方法并抛出异常。尝试在发送对象之前强制转换该对象:val castedvariable= onRecyclerItemClickListenerRef.get() as? OnRecyclerItemClickListener 然后发送为:

castedVariable.javaClass

没用。也许有人能给我一个解决问题的办法?

cuxqih21

cuxqih211#

在kotlin类中创建一个伴随对象相当于在java类中创建一个静态final类。因此,在companion对象中定义的方法并不等同于java类中的静态方法,并且不能像您所尝试的那样进行访问。试试这个:

import kotlin.reflect.full.companionObject

someKClass.companionObject?.java?.getMethod(
    "onCreateViewHolder", 
    ViewGroup::class.java,
    OnRecyclerItemClickListener::class.java
)

如果找不到导入,请添加kotlin反射库。

implementation "org.jetbrains.kotlin:kotlin-reflect:1.4.20"

相关问题