Непоследовательное предупреждение «Расширение затенено участником» в версиях Kotlin (2.0.0, 2.1.0, 2.2.0)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Непоследовательное предупреждение «Расширение затенено участником» в версиях Kotlin (2.0.0, 2.1.0, 2.2.0)

Сообщение Anonymous »

Предположим, у меня есть следующие интерфейсы Java и расширения Kotlin:

Код: Выделить всё

// Foo1.java
public interface Foo1 {
void scale(int x, int y, int z);
}

// Foo2.java
public interface Foo2 {
void translate(int x, int y, int z);
}

Код: Выделить всё

// Foo1Extensions.kt
fun Foo1.scale(x: Int, y: Int, z: Int) = scale(x, y, z)

// Foo2Extensions.kt
fun Foo2.translate(x: Int = 0, y: Int = 0, z: Int = 0) = translate(x, y, z)
Я заметил несогласованное поведение компилятора в разных версиях Kotlin в отношении предупреждения о затенении.
Kotlin 1.9.25:
Я получаю следующие предупреждения:

Расширение затеняется членом: public Abstract fun Scale(x: Int, y: Int, z: Int): Unit
Расширение затенено членом: public Abstract fun Translate(x: Int, y: Int, z: Int): Unit

Kotlin 2.1.0:
Я получаю аналогичные предупреждения:

Это расширение затенено членом: 'fun Scale(x: Int, y: Int, z: Int): Unit", определенный в '/Foo1'.
Это расширение затенено членом: 'fun Translate(x: Int, y: Int, z: Int): Unit', определенным в '/Foo2'.

Kotlin 2.0.0 и 2.2.0:
Никаких предупреждений не генерируется.
Я исследовал это вопрос и сформировал гипотезу. Я хотел бы знать, правильно ли я понимаю.
1. Что касается Kotlin 2.0.0
Похоже, что отсутствие предупреждения в 2.0.0, вероятно, было связано с отсутствующей функцией или пробелом в реализации в первоначальной
версии компилятора K2.
2. Что касается Kotlin 2.2.0
В версии 2.2.0, похоже, подавление предупреждения является намеренным. Кажется, это отражает проектное решение, согласно которому, даже если
сигнатура функции расширения соответствует члену Java, расширение все равно остается отличным и функционально полезным из-за
функций Kotlin, таких как именованные аргументы и параметры по умолчанию.
Например:

Код: Выделить всё

// This calls the Java member method
foo2.translate(1, 1, 1)

// These call the Kotlin extension function
foo2.translate(1)
foo2.translate(y = 1)
foo2.translate(x = 1, y = 1, z = 1)
Правильна ли моя оценка причин поведения в версиях 2.0.0 и 2.2.0?


Подробнее здесь: https://stackoverflow.com/questions/798 ... n-versions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»