泛型和抽象类在科特林
问题描述:
我有一个基础抽象类:泛型和抽象类在科特林
abstract class BaseFragment<T : BasePresenter> : Fragment(){
protected var presenter : T? = null
abstract fun providePresenter() : T
abstract fun getLayoutId() : Int
abstract fun onCreate()
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val root = inflater?.inflate(getLayoutId(), container, false)
presenter = providePresenter()
return root
}
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
onCreate()
}
}
我在Java代码:
//JAVA
private ArrayList<BaseFragment> fragments;
我如何使用它科特林?代码波纹管工作不
//Kotlin
val tabs = ArrayList<BaseFragment>() //error: One type argument expected for class BaseFragment<T : BasePresenter> : Fragment
答
你需要指定一个类型,请T
val tabs = ArrayList<BaseFragment<SomePresenterType>>()
THX。它应该工作,但不适合我的情况。我需要: 'val tabs = ArrayList>() tabs.add(instanceOf ())' 也许我在我的基础架构中做错了什么? –
Skullper
在kotlin中你只需使用'()'来创建实例,所以'tabs.add(ProfileFragment())'应该可以工作 – lukle
@PavliukR你应该在Java代码中指定完整类型的'BaseFragment'。这是你给出的例子中的一种原始类型。它应该给你一个编译器警告。 – marstran