#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)