当方法肯定是 class 的一部分时获取 *NoSuchMethodException*
Getting *NoSuchMethodException* when method definitely is part of the class
我有以下 class:
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 来获取包含 class 中所有方法名称的列表,并且该方法存在。这意味着我发送了一个错误的参数(但无法弄清楚什么是错误的)
附件列表:
附加信息:
我发送给 getMethod 的第二个参数是一个 WeakReference,它在他内部隐藏了一个来自类型 AllScoresFragment 和 的实例实现接口OnRecyclerItemClickListener,但是当我运行 getMethod方法时:
onRecyclerItemClickListenerRef.get()?.javaClass
,结果是 AllScoresFragment 类型而不是 OnRecyclerItemClickListener 类型。因此他找不到方法并抛出异常。
在发送之前尝试转换对象:
val castedVariable = onRecyclerItemClickListenerRef.get() as? OnRecyclerItemClickListener
然后发送为:
castedVariable.javaClass
没有帮助。
也许有人可以告诉我如何解决这个问题?
在 class Kotlin 中创建伴随对象等同于在 Java 中的 class 中创建静态最终 class。因此,伴随对象中定义的方法不等同于 Java 中的 class 中的静态方法,并且无法像您尝试的那样访问。试试这个:
import kotlin.reflect.full.companionObject
someKClass.companionObject?.java?.getMethod(
"onCreateViewHolder",
ViewGroup::class.java,
OnRecyclerItemClickListener::class.java
)
如果找不到导入,请添加 kotlin-reflect 库。
implementation "org.jetbrains.kotlin:kotlin-reflect:1.4.20"
我有以下 class:
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 来获取包含 class 中所有方法名称的列表,并且该方法存在。这意味着我发送了一个错误的参数(但无法弄清楚什么是错误的) 附件列表:
附加信息: 我发送给 getMethod 的第二个参数是一个 WeakReference,它在他内部隐藏了一个来自类型 AllScoresFragment 和 的实例实现接口OnRecyclerItemClickListener,但是当我运行 getMethod方法时:
onRecyclerItemClickListenerRef.get()?.javaClass
,结果是 AllScoresFragment 类型而不是 OnRecyclerItemClickListener 类型。因此他找不到方法并抛出异常。
在发送之前尝试转换对象:
val castedVariable = onRecyclerItemClickListenerRef.get() as? OnRecyclerItemClickListener
然后发送为:
castedVariable.javaClass
没有帮助。 也许有人可以告诉我如何解决这个问题?
在 class Kotlin 中创建伴随对象等同于在 Java 中的 class 中创建静态最终 class。因此,伴随对象中定义的方法不等同于 Java 中的 class 中的静态方法,并且无法像您尝试的那样访问。试试这个:
import kotlin.reflect.full.companionObject
someKClass.companionObject?.java?.getMethod(
"onCreateViewHolder",
ViewGroup::class.java,
OnRecyclerItemClickListener::class.java
)
如果找不到导入,请添加 kotlin-reflect 库。
implementation "org.jetbrains.kotlin:kotlin-reflect:1.4.20"