Переопределение нескольких версий конструктора в Kotlin - PullRequest
0 голосов
/ 11 июня 2019

Я пытался реализовать CustomView в Kotlin, который должен использоваться как для программных, так и для статических целей. Таким образом, мне нужно переопределить обе версии конструкторов.

Для программно использую версию,

class CustomView @JvmOverloads constructor(
   context: Context, 
) : View(context)

Для статически я использую версию,

class CustomView @JvmOverloads constructor(
  context: Context, 
  attrs: AttributeSet? = null,
) : View(context, attrs)

Как я могу изменить его для переопределения нескольких версий в одном и том же классе, который затем я могу создать из статических представлений, а также программно?

Есть несколько постов по конструкторам, т. Е. Вторичный конструктор Kotlin , который не помогает переопределить несколько версий конструктора.

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Я создал этот код для воссоздания вашей проблемы:

Test.java:

public class Test {

    private int i ;
    private String name;

    public Test(int i) {
        this.i = i;
        name = "test";
    }

    public Test(int i, String name) {
        this.i = i;
        this.name = name;
    }
}

TestK.kt:

class TestK : Test {
    constructor(i: Int, name: String): super(i, name)
    constructor(i: Int) : super(i)
}

Как видите, яперегружаю родительский конструктор разными параметрами.

1 голос
/ 11 июня 2019

Это должно работать как программно, так и статически: -

class CustomView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : View(context, attrs, defStyleAttr)

Программно просто позвоните: -

CustomView(context) // passing other params to constructor is not mandatory..
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...