Ошибка заключается в классе ToggleSwitch .Класс объявляет свойство var checkedPosition : Int? = null
, для которого Kotlin будет генерировать геттер и сеттер с именами getCheckedPosition
и setCheckedPosition
.Тем не менее, класс также объявляет функции с этими именами.
Давайте рассмотрим байт-код Kotlin, чтобы понять, почему он компилируется.Свойство компилируется в:
public final getCheckedPosition()Ljava/lang/Integer;
@Lorg/jetbrains/annotations/Nullable;() // invisible
L0
LINENUMBER 12 L0
ALOAD 0
GETFIELD com/llollox/androidtoggleswitch/widgets/ToggleSwitch.checkedPosition : Ljava/lang/Integer;
ARETURN
L1
LOCALVARIABLE this Lcom/llollox/androidtoggleswitch/widgets/ToggleSwitch; L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
В то время как метод получения компилируется в:
public final getCheckedPosition()I
L0
LINENUMBER 43 L0
ALOAD 0
GETFIELD com/llollox/androidtoggleswitch/widgets/ToggleSwitch.checkedPosition : Ljava/lang/Integer;
DUP
IFNULL L1
INVOKEVIRTUAL java/lang/Integer.intValue ()I
GOTO L2
L1
POP
ICONST_M1
L2
IRETURN
L3
LOCALVARIABLE this Lcom/llollox/androidtoggleswitch/widgets/ToggleSwitch; L0 L3 0
MAXSTACK = 2
MAXLOCALS = 1
Сигнатуры методов отличаются из-за типов возвращаемых данных, поэтому JVM принимает оба метода, но для вызывающей стороныэто неоднозначно.
Вместо этого класс должен переместить функциональность getter и setter в объявления get()
и set()
свойства.