泛型和抽象类在科特林

泛型和抽象类在科特林

问题描述:

我有一个基础抽象类:泛型和抽象类在科特林

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>>() 
+0

THX。它应该工作,但不适合我的情况。我需要: 'val tabs = ArrayList >() tabs.add(instanceOf ())' 也许我在我的基础架构中做错了什么? – Skullper

+0

在kotlin中你只需使用'()'来创建实例,所以'tabs.add(ProfileFragment())'应该可以工作 – lukle

+0

@PavliukR你应该在Java代码中指定完整类型的'BaseFragment'。这是你给出的例子中的一种原始类型。它应该给你一个编译器警告。 – marstran