bbaldino
12/03/2019, 6:45 PMoverride fun <T : Any> getterFor(valueType: KClass<T>): (String) -> T {
if (valueType.isSubclassOf(Enum::class)) {
// Need to call a method which expected KClass<T> where T : Enum<T>
enumHelper(valueType)
}
...
}
i can detect it's an enum, but can't figure out how to cast 'valueType' correctly such that it can be passed to a function which expects a KClass<T>
where T : Enum<T>
Shawn
12/03/2019, 6:53 PMT : Enum<T>
in `getterFor`’s signature instead of Any
?bbaldino
12/03/2019, 6:54 PMShawn
12/03/2019, 6:57 PMShawn
12/03/2019, 6:57 PMAny
Shawn
12/03/2019, 6:58 PMbbaldino
12/03/2019, 6:58 PMbbaldino
12/03/2019, 6:59 PMbbaldino
12/03/2019, 7:02 PMbbaldino
12/03/2019, 7:02 PMShawn
12/03/2019, 7:03 PM@JvmName
to distinguish the methodsbbaldino
12/03/2019, 7:07 PMbbaldino
12/03/2019, 7:08 PMclass Blah {
fun <T : Any> getterFor(valueType: KClass<T>) {
println("non-enum")
}
fun <T : Enum<T>> getterFor(valueType: KClass<T>, dummy: String = "") {
println("enum")
}
}
bbaldino
12/03/2019, 7:08 PMval x = Blah()
x.getterFor(Int::class)
x.getterFor(Foo::class)
that worksbbaldino
12/03/2019, 7:08 PMinline fun <reified T : Any> blah() {
val x = Blah()
x.getterFor(T::class)
}
bbaldino
12/03/2019, 7:09 PMblah<Int>()
blah<Foo>()
then it calls the non-enum both timesbbaldino
12/03/2019, 7:09 PMbbaldino
12/03/2019, 7:09 PMbbaldino
12/03/2019, 7:10 PMShawn
12/03/2019, 7:10 PMShawn
12/03/2019, 7:14 PMT : Any
will match any non-null type, which Enum falls underbbaldino
12/03/2019, 7:15 PMbbaldino
12/03/2019, 7:17 PMT
bbaldino
12/03/2019, 7:22 PMKClass<T>
that i've determined is an enum via isSubclassOf(Enum::class
, there's no way to cast it to a KClass<X : Enum<X>>
Shawn
12/03/2019, 7:24 PMbbaldino
12/03/2019, 7:24 PMShawn
12/03/2019, 7:26 PMenumHelper
function take KClass<Enum<*>>
? that’s a type you can legally (unchecked) cast tobbaldino
12/03/2019, 7:27 PMpublic <T extends Enum<T>> T getEnum(Class<T> enumClass, String path);
Shawn
12/03/2019, 7:28 PMbbaldino
12/03/2019, 7:28 PMcodeslubber
12/03/2019, 7:32 PMenum
s. Any time you know that the possible genera of types is limited, constrain them in an outer type.bbaldino
12/03/2019, 7:34 PMbbaldino
12/03/2019, 7:34 PM