我想使用外部库中的方法加载我的资产文件,并声明该功能:
inline fun <reified T> loadSync(path: String): T = loadSync(getAssetDescriptor(path))
而且我想让枚举存储我所有的资产路径和类型,目前看起来像这样:
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
答案 0 :(得分:0)
您不能对通用类型参数使用Asset.LOADER.clazz
之类的表达式。您要么必须将类型提供为
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)