Можно ли в Kotlin для прямого доступа к PUBLI c Резервное поле, объявленные в Java класса, если этот класс случается иметь соответствующий поглотитель для поля? Например, JDK java.awt.Dimension
имеет поля width
и height
, которые public
, но также существуют методы getWidth()
и getHeight()
(хотя они возвращают double
с вместо int
с так что они не являются строго «соответствующими» добытчиками). Вот пример кода:
fun obtainWidth(): Int {
val size = Dimension(1, 2)
return size.width
}
Байт-код Java четко показывает вызываемый метод getWidth()
, за которым следует преобразование double
в int
:
public final static obtainWidth()I
L0
NEW java/awt/Dimension
DUP
ICONST_1
ICONST_2
INVOKESPECIAL java/awt/Dimension.<init> (II)V
ASTORE 0
L1
ALOAD 0
INVOKEVIRTUAL java/awt/Dimension.getWidth ()D
D2I
IRETURN
Интересно, что если я заменю width
на getWidth()
, то код не скомпилируется, требуя явного преобразования.
Я использую Kotlin v1.3.61