我有以下课程:
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类型的实例,并且还实现了OnRecyclerItemClickListener接口,但是当我使用以下方法运行getMethod方法时:
onRecyclerItemClickListenerRef.get()?.javaClass
,结果是AllScoresFragment类型,而不是OnRecyclerItemClickListener类型。因此,他找不到该方法并引发异常。在发送之前尝试投射对象:val castedVariable =onRecyclerItemClickListenerRef.get() as? OnRecyclerItemClickListener
然后将其发送为:
castedVariable.javaClass
没有帮助。也许有人可以给我一个解决方法的想法?
在类中创建伴侣对象Kotlin等效于在Java中的类中创建静态最终类。因此,在伴随对象中定义的方法不等同于Java类中的静态方法,并且无法像你尝试的那样被访问。尝试这个:
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"
你是第二个人谁告诉我把.conpanionObject一个后KClass实例,但它并不适用于KClass(未解决)
没有合适的导入...您是否锁定了我所附的图片。无法理解原因,但是两种方法:onCreateViewHolder和onBindViewHolder路径看起来完全不同
是的,我是。也许是因为我有一个KClass <out BaseDataItem>?当调试器无法使我调试getMethod时
我想让自己的生活更轻松一点(真的很讨厌Kotlin),并且摆脱了同伴,并将该方法作为课程的一部分。现在,我当然会在列表中获取方法,但是当尝试通过以下方法获取方法时:someKClass.java.getMethod(“ onCreateViewHolder”,parent.javaClass,onRecyclerItemClickListenerRef.get()?. javaClass) 我仍然可以同样的例外。也许现在论点是错误的,但是我怎么能确定呢?一切看起来还可以,但仍然无法正常工作。哪些程序可以帮助我?我想使用调试器进入getMethod,但我总是越过
多谢 !!!但我意识到引起异常的另一点。也许现在可以很容易地帮助我。我真的希望您仍然有足够的能力来查看我编辑过的帖子