Введите тип в функцию в Котлине

#kotlin #generics

Вопрос:

В Swift вы можете передать тип в функцию следующим образом:

 func foo<T>(_ type: T.Type)

foo(String.self)
 

Есть ли какой-либо эквивалент в Котлине?
Я не хочу указывать тип в общих аргументах, потому что существует несколько общих аргументов, и было бы неприятно указывать их все, когда компилятор может решить это сам, за исключением этого. Кроме того, я не хочу использовать KClass, так как для этого требуется тип, к которому я не хочу предъявлять требования к типу.

Комментарии:

1. Было бы лучше, если бы вы указали вариант использования. возможно, есть лучший вариант, чем тот, который просто пытается имитировать swift

Ответ №1:

ты можешь ты class.java.typeName

 /**
 * Return an informative string for the name of this type.
 *
 * @return an informative string for the name of this type
 * @since 1.8
 */
public String getTypeName() {
    if (isArray()) {
        try {
            Class<?> cl = this;
            int dimensions = 0;
            do {
                dimensions  ;
                cl = cl.getComponentType();
            } while (cl.isArray());
            StringBuilder sb = new StringBuilder();
            sb.append(cl.getName());
            for (int i = 0; i < dimensions; i  ) {
                sb.append("[]");
            }
            return sb.toString();
        } catch (Throwable e) { /*FALLTHRU*/ }
    }
    return getName();
}
 
 foo(Int::class.java.typeName)
foo(String::class.java.typeName)