Intereting Posts
Kotlin: Как сделать меню панели инструментов с помощью Anko DSL? Не удалось проанализировать: org.jetbrains.kotlin.kapt3.diagnostic.KaptError: ошибка при обработке аннотации Firebase Android Авто Войти Kotlin vs. Java: функция вызова с параметром лямбда Рециркуляция просмотров share state Как передать тип nullable в функцию, которая принимает непустой тип? Котлин, умный литье невозможно из-за сложного выражения Суммируйте подмножество чисел в списке Как расширить класс класса Kotlin или использовать общие для создания простого свойства getter, который будет работать во всех подклассах Number? Статические методы расширения в Котлине Kotlin – Коллекция карт сортировки Ошибка в печатном простом номере с использованием функций высокого порядка в котлине Котлинская последовательность «пропускает» первые N записей Как переопределить метод открытого класса Java в Котлине? Kotlin 'до' забавного создания мусора IntRange

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

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

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 } } 

Нет, как компилятор знает, что такое 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.