我正在学习Kotlin.我的代码如下:
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
decoupler.attachNotifier(this)
if(activity is ScreenRouter) {
decoupler.attachRouter(activity)
}
}
Run Code Online (Sandbox Code Playgroud)
attachRouter() 方法:
fun attachRouter(router: ScreenRouter?) {
this.router = router
}
Run Code Online (Sandbox Code Playgroud)
如文档中所述,kotlin在使用is运算符检查后自动转换为类型.所以,我希望它会起作用.但相反,它困扰我编译错误说:
Smartcast ScreenRouter是不可能的,因为它activity是一个开放或定制的吸气剂.
我想也许错误是因为活动可以为空,所以我试过:
if(activity!=null && activity is ScreenRouter) {
decoupler.attachRouter(activity)
}
Run Code Online (Sandbox Code Playgroud)
但它没有工作,编译失败同样的错误.
但是,以下代码工作正常:
if(activity is ScreenRouter) {
decoupler.attachRouter(activity as ScreenRouter)
}
Run Code Online (Sandbox Code Playgroud)
它没关系,但上面的错误似乎没有解释为什么smartcast失败.我不是Kotlin专家,我只是一个学习Kotlin的初学者.我找不到任何文件.这些错误描述使Kotlin难以学习.任何人都可以简单地解释一下吗
我在我的公共模块BaseActivity.kt和BaseFragment.kt中使用组件开发.当其他模块继承它们时会发生以下问题
> D:\Android\OneDaily\module_main\src\main\java\com\boco\main\MainActivity.kt
> Error:(7, 24) Unresolved reference: base
> Error:(9, 22) Unresolved reference: BaseActivity
> Error:(21, 5) 'onCreate' overrides nothing
> Error:(17, 5) 'getLayoutRes' overrides nothing
> Error:(22, 15) Unresolved reference: onCreate
> Error:(27, 22) Unresolved reference: findViewById
> Error:(42, 34) Unresolved reference: supportFragmentManager
> D:\Android\OneDaily\module_main\src\main\java\com\boco\main\TimelineFragment.kt
> Error:(7, 24) Unresolved reference: base
> Error:(10, 5) 'getLayoutRes' overrides nothing
> Error:(9, 26) Unresolved reference: BaseFragment
> Error:(14, 5) 'onCreateView' overrides nothing
> Error:(15, 22) Unresolved reference: onCreateView
Run Code Online (Sandbox Code Playgroud)
BaseActivity.kt:
abstract class …Run Code Online (Sandbox Code Playgroud) 我已经更新了我的Kotlin项目以使用支持库27.0.0.当我尝试在片段中获取Activity上下文时,我收到此错误:
> Type mismatch: inferred type is FragmentActivity? but Context was expected
Run Code Online (Sandbox Code Playgroud)