Добавление вторичного конструктора к родительскому объекту неожиданно влияет на дочерние классы

У меня (казалось бы) странная проблема. Его можно воспроизвести всего несколькими строчками:

open class Parent(val map: HashMap<String, Any>) { // constructor(unusedArgument: Int): this(hashMapOf()) } class Child: Parent(hashMapOf(Pair("key", "value"))) 

Он компилируется и работает так, как ожидалось, пока я сохраняю вторичный конструктор Parent . Как только я верну его обратно, эта ошибка lint появляется, когда вызывается родительский constuctor Child :

Ошибка: ни одна из следующих функций не может быть вызвана с предоставленными аргументами:

public constructor Родитель (карта: HashMap), определенный в Parent

public constructor Родитель (unusedArgument: Int), определенный в Parent

Ошибка исчезает, если любое из них истинно:

  • Я указываю дисперсию как HashMap<String, out Any> ,
  • Мой вторичный конструктор пуст,
  • map объявляется как Map вместо HashMap (чего я не делаю, потому что для своих целей мне нужно его реализовать Serializable ).

Честно говоря, это не имеет большого смысла для меня. Почему это происходит, только если я добавляю непустой вторичный конструктор к родительскому классу? Какое это имеет отношение к чему-либо? И как именно эти «исправления» исправить?

Благодарю.

Это может быть дизайн или ошибка компилятора. Я рекомендую сообщить об этом в Kotlin (KT) | YouTrack .

В качестве обходного пути вы можете явно объявлять общие типы, используемые в HashMap при вызове конструктора Parent :

 class Child : Parent(hashMapOf<String, Any>(Pair("key", "value"))) 

Я не уверен, почему компилятор принимает HashMap<String, String> как HashMap<String, Any> когда вторичный конструктор не определен, но не принимает его при определении вторичного конструктора, но иногда компилятор просто не делает вывод общие типы, и вам нужно явно объявить их.