【发布时间】:2019-07-18 06:27:10
【问题描述】:
我希望从 Kotlin 调用以下 Java 方法签名
<C extends javax.cache.configuration.Configuration<K,V>> C getConfiguration(Class<C> clazz)
我认为在 Java 中标准方式是调用
CacheConfiguration configuration = igniteCache.getConfiguration(CacheConfiguration.class);
我不知道如何在 Kotlin 中表达这个来获取这个对象。
我试过了
val configuration = igniteCache.getConfiguration(CacheConfiguration::class.java)
但这给了我以下错误
Type mismatch: inferred type is CacheConfiguration<*, *> but Configuration<K!, V!>! was expected
那么调用这个方法的正确方法是什么?
更新
https://stackoverflow.com/a/57016668/10039185 提供了如何做到这一点的答案。
我只是添加了两个带有更完整的 Ignite 具体示例的 sn-ps,以说明如何执行此操作
使用未经检查的演员表
private fun <K, V> checkCacheUsingUncheckedCast(igniteCache: IgniteCache<K, V>?) {
val configuration = igniteCache?.getConfiguration(CacheConfiguration::class.java as Class<CacheConfiguration<K, V>>)
if (configuration != null) {
// do something with the configuration
}
}
使用具体化类型
private fun <K, V> checkCacheUsingReifiedType(igniteCache: IgniteCache<K, V>?) {
val configuration = igniteCache?.configuration<K, V, CacheConfiguration<K, V>>()
if (configuration != null) {
// do something with the configuration
}
}
private inline fun <K, V, reified C : Configuration<K, V>> IgniteCache<K, V>.configuration() = getConfiguration(C::class.java)
【问题讨论】: