Я использовал свой универсальный метод с Class для передачи имени типа, так как я не могу использовать reified. Это заставило меня вызывать мои методы с помощью MyModule::class.java
Недавно я узнал о фабриках типов с использованием ::MyModule
и подумал, что, возможно, я мог бы использовать его для получения имени типа вместо этого, потому что он короче, чем предыдущий метод.
Проблема в том, что я не знаю, как извлечь simpleName
из результата фабрики. Я мог бы создать экземпляр factory()::class.simpleName
, но это кажется расточительным.
tl;dr: я хочу выполнить рефакторинг с
до
//, чтобы мне не приходилось вводить ::class.java
каждый раз, когда я его использую
override fun <T: IMyModule>set(key: String, value: String, type: Class<T>) {
val settings = type.simpleName;
...
}
set("COM", "1", SmModule::class.java);
override fun <T: IMyModule>set(key: String, value: String, type: () -> T) {
val settings = type.returnType.simpleName; // doesn't work
val settings = type()::class.simpleName; // inefficient
...
}
set("COM", "1", ::SmModule);