Тип передачи из переменной - PullRequest
1 голос
/ 18 апреля 2020

Я хочу использовать метод из внешней библиотеки для загрузки файлов моих активов, объявление этой функции:

inline fun <reified T> loadSync(path: String): T = loadSync(getAssetDescriptor(path))

И я хотел бы иметь enum для хранения всех моих путей и типов активов, в настоящее время, это выглядит так:

enum class Asset (val path: String, val clazz: Class<*>){
    // Textures
    LOADER("splash-screen/loader.png", Texture::class.java),
    // ...
}

и будет здорово, если удастся сделать что-то подобное

assetStorage.loadSync<Asset.LOADER.clazz>(Asset.LOADER.path)

, но я не знаю, как исправить объявление clazz

1 Ответ

0 голосов
/ 18 апреля 2020

Нельзя использовать выражение типа Asset.LOADER.clazz для аргумента типа Generi c. Вам нужно будет либо указать тип как

assetStorage.loadSync<Texture>(Asset.LOADER.path)

, либо создать функцию обтекания вокруг функции loadSync, передавая класс в качестве аргумента, чтобы компилятор мог выводить тип, как показано ниже

@Suppress("UNUSED_PARAMETER")
inline fun <reified T> newLoadSync(path: String, clazz: T): String = loadSync<T>(path)

и используйте его как

assetStorage.newLoadSync(Asset.LOADER.path, Asset.LOADER.clazz)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...