Kotlin在Android Studio 3.0-alpha8中应用()扩展lint消息
亲爱的Stackoverflow同仁! 我有以下代码,产生followin lint错误。
fun newInstance(message: String?): DialogFragment { return DialogFragment().apply { arguments = Bundle().apply { putString("arg", message) } } }
该消息指出, apply()
函数中的this
引用指向BaseBundle
类,它是API 21以来可用的,它将在较低的API上崩溃。 Bundle#putString(key,value)在低版本上肯定可用,但在Android Studio 3.0-alpha8中有错误。
这个问题很奇怪,因为我可以看到反编译的代码是这样的:
哪个引用Bundle
类型不是BaseBundle
。
为什么我们首先有Lint错误?
一种解决方法是使用let
而不是apply
,如下所示:
fun newInstance(message: String?): DialogFragment { return DialogFragment().apply { arguments = Bundle().let { it.putString("arg", message) it } } }
它看起来像一个错误这是一个已知的错误,但实际上可以看到为什么你看到的Bundle.java源代码的警告。
之前api 21 Bundle
有一个方法( 在这里检查 )
public void putString(@Nullable String key, @Nullable String value)
而班级本身没有超班。 从api 21 Bundle
扩展了一个新添加的BaseBundle
类,并且这个方法的BaseBundle
被移到了BaseBundle
。 所以,当你调用API 21以上的方法时,该方法属于BaseBundle
,对于较低版本,它属于Bundle
。
这与apply
块有关,因为如果直接调用Bundle
-type变量的方法,警告不会出现。
- anko记录器库在调试版本或签名版本中记录消息
- Kotlin中的Room Persistence lib实现
- Kotlin中每个类只允许有一个伴随对象
- 未解决的参考DaggerApplicationComponent
- Android Firestore微调不加载我的文档
- 内联setter或不在Kotlin中创建未使用的setter?
- Kotlin与Java混合错误:无法找到符号
- 从1.0.2 – 1.0.3升级Kotlin:java.lang.NoSuchMethodError:没有虚方法provideInjectedData $ app_compileDebugKotlin()
- 使用Kotlin和Java编译器的Android项目需要很长时间才能编译 – 超过20分钟