Код: Выделить всё
class FooCollection(val items: Array) : Collection
{
override fun iterator(): Iterator = items.iterator()
override fun contains(item: String): Boolean = items.contains(item)
override fun containsAll(elements: Collection): Boolean = elements.all {contains(it)}
override fun isEmpty():Boolean = items.isEmpty()
override val size: Int get() = items.size
}
Я хотел бы выявить size as size () в Java. Я пытался украсить с помощью @jvmname , но это не компилируется. Я думаю, что этот ответ дает представление о том, почему (не может смешать @jvmname с переопределениями).
Код: Выделить всё
// Compile error: '@JvmName' annotation is not applicable to this declaration
@get:JvmName
override val size: Int get() = items.size
Лучшее, что я придумал, это < /p>
Код: Выделить всё
@get:JvmSynthetic // hide from java
override val size: Int get() = items.size
// Expose the size val as "size()" to java instead of "getSize()" to mimic java's Collection
@JvmName("size")
fun javaSize() = size
Подробнее здесь: https://stackoverflow.com/questions/794 ... tlin-class