Kotlin,子类的二级构造函数

时间:2018-09-05 13:12:04

标签: syntax kotlin

我尝试像这样调用父级的第二个构造函数

        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);

        instantCategoryList.setItemAnimator(new DefaultItemAnimator());
        instantCategoryList.setAdapter(instantCategoryAdapter);
        instantCategoryList.setHasFixedSize(true); //Size of RV will not change
        instantCategoryList.setLayoutManager(staggeredGridLayoutManager);
        staggeredGridLayoutManager.invalidateSpanAssignments();
        instantCategoryList.setNestedScrollingEnabled(false);

,但会产生abstract class A(val i: Int) { constructor(c: C) : this(c.i) } class B() : A(0) { constructor(c: C) : super(c) // error is here } class C(val i: Int) 错误。子类如何调用父级的辅助构造函数?

1 个答案:

答案 0 :(得分:6)

根据doc

  

如果该类具有主要构造函数,则每个次要构造函数   需要直接或直接委派给主要构造函数   间接通过另一个辅助构造函数。使用this关键字可以委派给同一类的另一个构造函数

您为B(即B())声明了一个主要构造函数,因此,该次要构造函数应调用其主要构造函数。

  

子类如何调用父级的辅助构造函数?

如果您希望二级构造函数调用父级的二级构造函数,则应首先删除B的一级构造函数。

abstract class A(val i: Int) {
    constructor(c: C) : this(c.i)
}

class B : A {
    constructor(c: C) : super(c)
}

class C(val i: Int)