为了账号安全,请及时绑定邮箱和手机立即绑定

Kotlin 中的每个类都扩展任何类吗

Kotlin 中的每个类都扩展任何类吗

Smart猫小萌 2024-01-05 14:47:19
我正在编写一个扩展函数来RecyclerView设置LayoutManager和Adapter设置RecyclerView。该函数应该接受任何扩展自的适配器类,RecyclerView.Adapter<Any>就像我们在 Java 中使用的那样RecyclerView.Adapter<?>。我们如何在 Kotlin 中实现这一点?internal fun <T : RecyclerView.Adapter<Any>> RecyclerView.initAndSetAdapter(context: Context, adapter: T) {    this.layoutManager = LinearLayoutManager(context)    this.setHasFixedSize(true)    this.adapter = adapter}由于类型无效,对此方法的函数调用未编译。但如果我更改Any为*,则它可以正常工作。internal fun <T : RecyclerView.Adapter<*>> RecyclerView.initAndSetAdapter(context: Context, adapter: T) {    this.layoutManager = LinearLayoutManager(context)    this.setHasFixedSize(true)    this.adapter = adapter}为什么方法调用不与类一起编译?Kotlin 中的每个类都像 Java类一样Any扩展类吗?AnyObject
查看完整描述

3 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

根据文档: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html

Every Kotlin class has Any as a superclass.

话虽这么说 - 适配器采用的类需要从 ViewHolder 扩展。


查看完整回答
反对 回复 2024-01-05
?
慕标5832272

TA贡献1966条经验 获得超4个赞

RecyclerView.Adapter<Any>相当于 Java RecyclerView.Adapter<Object>,但与RecyclerView.Adapter<?>. 特别是,如果你有类似的东西

class AnAdapter extends RecyclerView.Adapter<SomeType>

then是(在 Java 中)AnAdapter的子类型,而不是( )的子类型。因此,您不能将 的实例传递给需要 的子类型的方法。RecyclerView.Adapter<*>?RecyclerView.Adapter<Any>ObjectAnAdapterRecyclerView.Adapter<Any>

查看完整回答
反对 回复 2024-01-05
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

RecyclerView.Adapter 的类型必须是 ViewHolder 或 ViewHolder 子类。这是在类中定义的,您不能将其范围扩展到 Any 或 Object。这将违背泛型的目的。通过使用星形投影,它会自动使用类定义的最大边界<out ViewHolder>/<in Nothing>



查看完整回答
反对 回复 2024-01-05
  • 3 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信