Hello, I have some code which compiles correctly (Flink 1.4) under Java 8. It uses generic types. While it compiles correctly, the execution fails with the error: org.apache.flink.api.common.functions.InvalidTypesException: Type of TypeVariable 'K' in 'class X' could not be determined. This is my main: public static void main(final String[] args) { This is my class X: public class X<K> { public X() { Perhaps I'm lacking knowledge on the way Java's generics work, but why can't Flink determine the TypeVariable of 'K'? As I am instantiating X parameterized as a Long, that information should eventually reach Flink and the constructor of X would be equivalent to this: public X() { During execution, however, this error pops up. What am I missing here, and what is the best way to achieve this generic behavior in a Flink-idiomatic way? Thank you very much for your time. |
Hi Miguel,
the issue that you are observing is due to Java's type erasure. "new MyClass<String>()" is always erasured to "new MyClass()" by the Java compiler so it is impossible for Flink to extract something. For classes in declarations like class MyClass<String> extends ... { ... } the compiler adds the actual generic and Flink can extract it. So for classes the generics remain but generics passed to objects are erasured. Regards, Timo Am 16.08.18 um 22:28 schrieb Miguel Coimbra:
|
Free forum by Nabble | Edit this page |