钟小桀 2022-03-22 10:06 采纳率: 66.7%
浏览 77
已结题

Room数据库的通用封装,如何获取传入的泛型类型的表名

想写一个数据库Dao接口的通用类BaseDao,就不用每个数据表都写很多一样的方法了。然后发现无法区分传入的 $tableName ,在网上找了一圈发现以下代码,我运行的时候发生错误,获取的object转换后为null。想问问大家是怎么获取的?

interface BaseDao<T> {
 
    fun loadAll(): List<T> {
        val query = SimpleSQLiteQuery("select * from $tableName")
        return doFindAll(query)
    }
    val tableName: String
        get() {
            val clazz = (javaClass.superclass?.genericSuperclass as ParameterizedType)
                .actualTypeArguments[0] as Class<*>
            val tableName = clazz.simpleName
            Log.d("ez", "getTableName: -->$tableName")
            return tableName
        }
}

运行时发现是这里获取了null值。是获取错了还是没有获取到?

val clazz = (javaClass.superclass?.genericSuperclass as ParameterizedType)
                .actualTypeArguments[0] as Class<*>

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 3月30日
    • 创建了问题 3月22日

    悬赏问题

    • ¥15 高通uboot 打印ubi init err 22
    • ¥20 PDF元数据中的XMP媒体管理属性
    • ¥15 R语言中lasso回归报错
    • ¥15 网站突然不能访问了,上午还好好的
    • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
    • ¥15 semrush,SEO,内嵌网站,api
    • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
    • ¥15 振荡电路,ADS仿真
    • ¥15 关于#c语言#的问题,请各位专家解答!
    • ¥15 这个如何解决详细步骤