Articles of дженерики

Как указать параметр типа, который я не знаю

Я уменьшил свою проблему до минимальной демонстрации: interface Property<T : Comparable<T>> fun <T : Comparable<T>> parsePropertyValue(property: Property<T>, value: String): T = TODO() fun test() { val property: Property<*> = TODO() val value = parsePropertyValue(property, "test") } Вызов parsePropertyValue не компилируется с сообщением об ошибке «Невозможно указать параметр типа T». Эквивалентный код Java компилируется без проблем: […]

Подстановочный шаблон дженериков Котлина с расширением

Итак, я пытался внедрить некоторую Java в Kotlin, и я столкнулся с этой проблемой передачи аргументов в подстановочные общие методы класса. Например: interface A class B<in T : A> { fun pass(e: T) { /* do something */ } } class C { private val things = mutableListOf<B<*>>() fun test(e: A) { things.get(0)?.pass(e) // This […]

Ограничение генерации Котлина

Я хочу создать класс, который может принимать ограниченный общий тип, так что мой класс может принимать только подкласс определенного класса. Но без так много броска. Мой код выглядит так: open class SomeClass<V> where V : SomeType { private val vc: PS<SomeType> = PS.create() protected val z: ZQ<V> = vc.doSmt(-1).map { it as V } open […]

Проблема генериков Котлина

Ошибка при передаче this onResume . Как-то он не признает, что this реализует ActivityLifecycleType , я чего-то не хватает? open class BaseActivity<ViewModelType: ActivityViewModel<*>>: RxAppCompatActivity(), ActivityLifecycleType { protected var viewModel: ViewModelType? = null @CallSuper override fun onResume() { super.onResume() viewModel?.onResume(this) ==> Error Required Nothing, Find BaseActivity<ViewModelType> } } open class ActivityViewModel<in ViewType: ActivityLifecycleType> { fun onResume(view: […]

Генераторы Kotlin: использование интерфейса для MVP

В приведенном ниже примере я понимаю, что BaseActivity не может быть предоставлен в качестве аргумента presenter.onAttached , хотя он реализует интерфейс BaseView, который выглядит так же, как V. Реализующему Presenter может быть предоставлен подкласс BaseView, например MainPresenter<MainView> , что означает, что BaseView недостаточно специфичен. abstract class BaseActivity<V : BaseView, out P : BasePresenter<V>> : AppCompatActivity(), […]

Kotlin werid компилирует ошибку, связанную с дженериками и автоматическим типом

Я думаю, что этот фрагмент кода должен скомпилировать: package bug import java.lang.reflect.* data class Descriptor(val clazz: Class<*>, val modifiers: Int, val info: List<String>) { constructor(clazz: Class<*>, modifiers: Int, vararg info: List<String>) : this(clazz, modifiers, mutableListOf<String>().apply { info.forEach { this@apply.addAll(it) } }) } private val AnnotatedElement.info: List<String> get() = getAnnotation(Info::class.java)?.values?.toList() ?: listOf<String>() annotation class Info(val values: […]

Как создать экземпляр типового типа?

Я знаю, что этот вопрос задан раньше, но я еще не смог его решить. Я пытаюсь создать экземпляр класса через общий тип. Я пробовал это: Class<VH>::getConstructor.call(parameter).newInstance() Но, я получаю эту ошибку: I get this error for this method: Callable expects 2 arguments, but 1 were provided. Я также пробовал этот метод: inline fun <reified VH> […]

Котлин: путаница с дженериками

Realm возвращает список FooRealm . FooRealm – это Foo public class FooRealm extends RealmObject implements Foo Но я получаю несоответствие типа: Type mismatch: Required: Observable<List<FooRealm>> Found: Observable<List<Foo>> когда я делаю: override fun getFoo(): Observable<List<Foo>> { return Realm.getDefaultInstance().use { realm -> realm.where(FooRealm::class.java) .equalTo("bar", true) .findAllAsync() .asObservable() } }

Ограничения типа класса Generics?

Предположим, у меня есть следующий код: sealed class Animal(val type: String) { data class Cat(val color: String) : Animal("cat") data class Dog(val mood: String , val ownersName : String) : Animal("dog") } abstract class AnimalDescriptor<out T : Animal>(val a: T) { abstract fun getSummary(): String } class CatDescriptor(a: Animal.Cat) : AnimalDescriptor<Animal.Cat>(a) { override fun getSummary(): […]

Gson не может десериализовать общий тип ArrayList, используя TypeToken

У меня есть модель для Gson с этой структурой: data class ApiResponse(val isError: String, val errorMessage: String, data: T) Поле data является общим типом. Когда я пытаюсь проанализировать ответы API, он работает во всех случаях, кроме тех, где тип данных является ArrayList. Я десериализую JSON следующим образом: val typeToken = object : TypeToken<SprucedApiResponse< T>>() {}.type […]