Articles of generics

Kotlin: Общая функция как возвращаемый тип?

В Котлине можно объявить общий тип функции как возвращаемый тип функции? То, что я хочу достичь, будет выглядеть так на Java: interface Factory { static Factory INSTANCE = new FactoryImpl(); <T> T create(String name, Class<T> type); } class PrefixedFactory implements Factory { private final String prefix; PrefixedFactory(String prefix) { this.prefix = prefix; } @Override public […]

Как запретить вызовы функций с определенным подтипом типа параметра?

Предположим, что у меня есть общая функция: fun <T: Foo> bar(t: T) { … } Затем, позже в какой-то момент времени, я решил, что бессмысленно (или даже ошибочно) называть bar(…) с T специализированным как Qux , что, конечно же, является одним из подтипов Foo . Но у меня есть сильная причина не менять иерархию классов […]

Как объявить параметр расширения для общих помощников перечислений

Я хотел бы иметь .MAX на общих перечислениях для представления значений. Я попытался немного поиграть, но я не мог понять. Когда я пишу, например, это: val Enum.Companion.MAX get() = enumValues().size Он жалуется на enumValues() что Ошибка вывода типа: недостаточно информации для вывода параметра T в inline fun> enumValues ​​(): Array Пожалуйста, укажите это явно. Это […]

стандартная двоичная функция maxBy

Я обобщил следующий код: fun max(that: Type): Type = if (this.rank() < that.rank()) that else this к этому: fun max(that: Type): Type = maxBy(this, that) { it.rank() } fun maxBy<T, U : Comparable<U>>(a: T, b: T, f: (T) -> U): T = if (f(a) < f(b)) b else a Есть ли такая функция, как maxBy […]

Kotlin: компилятор не выводит общий тип для некоторых операторов

Почему компилятор Kotlin не может указать общий тип с некоторыми вызовами оператора? Например: class Example { operator inline fun <reified T : Any> unaryMinus(): T { … } } Используя его в основном методе … fun main(args: Array<String>) { val ex = Example() val works: Boolean = ex.unaryMinus() val doesntWork: Boolean = -ex }

Как передать массив целых чисел методу, ожидающему `Array <T>`?

Я преобразовал java shellSort в Kotlin. Проблема в том, что я понятия не имею, чтобы назвать этот метод. Ява package Sorts; public class ShellSort extends Sorter{ @Override public <T extends Comparable<? super T>> void sort(T[] a) { int h = 1; while((h*3+1) < a.length) h = 3*h+1; while(h > 0){ for(int i = h-1; i […]

Двухмерный общий поставщик массивов

Я пытаюсь внедрить общий поставщик двумерных массивов в Котлине: public fun <T> array2dim(sizeOuter: Int, sizeInner: Int): Array<Array<T>> = Array(sizeOuter) { Array(sizeInner) } но не может понять, как преодолеть эту проблему. Компилятор говорит: Ошибка интерфейса типа: Недостаточно информации для вывода параметра T в конструкторе Array (размер: Int, init: (Int) → T) Просьба указать его явно.

Типы подстановок Java против звездной проекции Котлина

Я читал kotlin документацию о различиях между Java и Koltin здесь https://kotlinlang.org/docs/reference/comparison-to-java.html . Там было указано, что у Колтина нет подстановочных типов . Однако, внимательно прочитав документацию о дженериках, я нашел информацию о звездной проекции и, честно говоря, я не вижу разницы. Может кто-нибудь объяснить мне, как это List<?> list; отличается от этого lateinit var […]

Операторы с нулевым значением, допустимые в общем классе?

У Kotlin есть прекрасные возможности ( ?. И !!. ), обрабатывающие типы с нулевым значением. Но это меня просто поглаживает – что, если вы не знаете, имеете ли вы дело с типом с нулевым или непустым значением? Что делать, если у вас есть универсальный класс MyClass<T> , тогда у вас есть только один тип T […]

Неожиданная разница типов между эквивалентным Java и кодом потока Kotlin

EDIT 1 марта 2016 года. Яркое предупреждение: этот вопрос задал вопрос о Котлине до 1.0.0. Все изменилось, так как Kotlin 1.0.0. См. Ниже описание @Jayson Minard для ответа Kotlin 1.0.0. В коде Java 8, который использует Stream, я пишу такие вещи, как public static void main(String… args) { Stream<Integer> integerStream = Stream.of(1,2,3); List<Integer> integerList = […]

Intereting Posts