如何在Kotlin中比较Java类?Android-GPUImage代码转换咨询
Kotlin中转换android-gpuimage库代码及类比较指南
嘿,我来帮你搞定这段android-gpuimage库的Java代码转换,同时解释清楚Kotlin里怎么正确比较Java类~
一、完整的Kotlin转换代码
Android Studio自动转换时截断了部分内容,这里给你补全并修正后的完整代码,和原Java逻辑完全一致:
if (mFilter == null || filter != null && mFilter.javaClass != filter.javaClass) { mFilter = filter mGPUImage.setFilter(mFilter) mFilterAdjuster = GPUImageFilterTools.FilterAdjuster(mFilter) }
二、Kotlin中比较Java类的正确姿势
因为我们用到的GPUImageFilter是Java库中的类,所以需要针对Java的Class对象进行比较,这里给你梳理几种常用且规范的方式:
直接用
javaClass获取Class对象后比较
这是对应原Java代码getClass()的写法,Kotlin中用javaClass属性获取对象对应的JavaClass实例,然后用!=或者equals()比较都可以,效果完全一样:// 两种写法等价,任选其一即可 mFilter.javaClass != filter.javaClass !mFilter.javaClass.equals(filter.javaClass)如果涉及Kotlin自定义类,用
::class.java适配
如果你自己写了继承自GPUImageFilter的Kotlin类,要和Java Class对象比较时,需要用::class.java拿到对应的Java Class实例,比如:class CustomKotlinFilter : GPUImageFilter() // 比较自定义Kotlin类的Java Class对象 val customFilter = CustomKotlinFilter() if (customFilter.javaClass == CustomKotlinFilter::class.java) { // 执行相关逻辑 }避坑:别混淆Kotlin的KClass和Java的Class
Kotlin里的::class返回的是KClass(Kotlin特有的类引用),和Java的Class不是同一类型。虽然对于Java类来说,直接写mFilter::class != filter::class也能运行,但更规范的是用javaClass明确获取Java的Class对象,避免类型混淆带来的潜在问题。
内容的提问来源于stack exchange,提问作者johnguild
相关产品推荐
相关产品推荐

