Intereting Posts
Как заменить Doko-Inko, уи-трюк с функциями kotlin 1.1.0 kotlinx-coroutines-core lib? В чем преимущества написания кода JavaScript с помощью Kotlin? Связывание слушателя; Не удается найти сеттер Класс отсутствует конструктор без аргументов, но я предоставил конструктор без аргументов Как преобразовать String в Long в Kotlin? Android показывает, казалось бы, безобидное предупреждение при воспроизведении звука? Как преобразовать массив строк в массив Int в Kotlin Фильтрующий лямбда-фильтр Kotlin с использованием индекса итерации Предупреждение Proguard: не может найти ссылочный класс в Observable Как создать новый список из пыльника в котлин? Как я могу вызвать collect (Collectors.toList ()) в потоке Java 8 в Котлине? Запрос HTTP в Котлине Как запустить тесты Spek с Maven? Это плохая практика поиска данных в списке по индексу несколько раз? Преобразование единиц измерения в километры до миль не возвращает ожидаемый результат

Общая собственность Котлин

Есть ли способ в котлине создать родовое свойство без объявления типа общего класса? Что-то похожее на это:

interface Generic { val t: T //I need this type only once, thats why I dont wanna pass in the class level fun <E> gMethod(e: E) { //This works, so I'm wondering if there's something similiar to properties } } 

Solutions Collecting From Web of "Общая собственность Котлин"

Нет, как компилятор знает, что такое T ? Если вам вообще не нужен параметр универсального типа T , вы можете просто объявить его как val t: Any .

Поскольку в документации о дженериках нет упоминания о такой вещи, я уверен, что это не является частью языка.

Это, скорее всего, потому, что вы должны объявить тип свойства в какой-то момент. Общие функции имеют смысл, потому что вы вызываете их с аргументами, которые имеют какой-то статический тип (или в случае функций расширения, называть их такими аргументами).

Вопрос в том, почему вы хотите иметь такое общее свойство?

Что бы вы ожидали, что это свойство примет в качестве значения, когда вы пытаетесь его установить? Если ответ – это что угодно, возможно, его тип должен быть Any или Any? ,

То же самое относится и к чтению – какой тип вы ожидаете от значения, которое вы читаете из этого свойства? Если вы вообще не хотите указывать тип, возможно, он должен быть Any или Any? ,

Решение, которое на самом деле находится на языке, которое имеет класс / интерфейс, принимает параметр типа, решает эти проблемы.

Я полный новичок в Котлине, но общая собственность на самом деле не что-то не так, не так ли?

Как об этом, как о витрине. Я понимаю, что это решение не полностью решает ваш вопрос.

 interface BaseProperty<T> { var value: T } class IntProperty(var stringVal: String) : BaseProperty<Int?> { override var value: Int? get() = Integer.valueOf(stringVal) set(v: Int?) { stringVal = v.toString() } } 

Поскольку getter и setter свойства также являются функциями, было бы неплохо, если бы я смог указать T как общий тип. Я попытался использовать getValue и setValue в качестве общих функций и, похоже, работает, но не использует иконус свойства Kotlin.