Все вторичные конструкторы должны вызывать первичный конструктор, прямо или косвенно. Что означает:
class X(var x: Int){
constructor() : this(0.0);
constructor(x: Double) : this(x.toInt());
}
Однако вы не можете сделать это:
class X(var x: Int){
constructor() : this();
constructor(x: Double) : this();
}
Потому что это приведет к исключению переполнения стека.
Приведенный выше пример - ужасный код, но это просто демонстрация.
Так с этой строкой:
constructor():this() {}
Вы заставляете вторичный конструктор вызывать себя.
Вместо этого вызовите основной конструктор. Это означает, что вам нужно передать FirebaseUser
в качестве аргумента. Я не знаком с Firebase, поэтому я оставлю это вам.
Но в качестве примера, вы, в основном, должны сделать это вместо этого:
constructor() : this(FirebaseUser());
Либо инициализируйте напрямую, либо получите его из метода. Если вы не можете получить его, вы, конечно, можете просто сделать его обнуляемым.
Но если вы имеете дело с обнуляемыми значениями, предполагая, что большая часть вашего кода находится в Kotlin, вы можете просто сделать его обнуляемым со значением по умолчанию и удалить вторичный конструктор:
class UserModel(user: FirebaseUser? = null){
init{
// Now that `user` is nullable, you need to change the assignments to include null-safe or non-null assertion (?. or !!. respectively)
}
}