Как сделать общий метод Kotlin статическим? - PullRequest
0 голосов
/ 25 июня 2019

Я знаю, что можно написать статический универсальный метод в Java.

Я пытался реализовать собственное решение в Kotlin, но мне не удалось.

class Wrapper<T>
{
    companion object <T> // error: Type parameters are not allowed for objects.
    {
        private var value: T? = null

        // implement some methods
    }
}

Есть ли способ реализовать статический универсальный метод в Kotlin?

Ответы [ 3 ]

3 голосов
/ 25 июня 2019

companion object не является методом.Фактически, это object, который является компаньоном для класса Wrapper, поэтому он не может знать об универсальном типе родительского класса.То же самое относится и к Java:

public class Wrapper<T> {
    public static T value; //ERROR
}

В этом companion object вы можете объявить методы и поля, которые будут static в мире Java.

class Wrapper<T>
{
    companion object
    {
        fun <T> genericMethod(){

        }
    }
}

Но имейте в виду, чтотип Wrapper<T> не связан с типом T в fun <T> genericMethod().

2 голосов
/ 25 июня 2019

Для Kotlin нет разницы между статическими (верхнего уровня, сопутствующими) и функциями / методами экземпляра. Итак, та же обобщенная функция / метод

fun <T> something() {
    // TODO
}

допустимо как в теле класса, на верхнем уровне, так и в объявлении компаньона или объекта.

0 голосов
/ 25 июня 2019

Вам просто нужно указать параметр общего типа функции.Неважно, где находится функция, будь то класс, файл, объект-компаньон и т. Д.
Пример с объектом-компаньоном:

companion object {
    fun <T> generic(t: T) {
        // do something generic
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...