如何动态指定 Java 泛型类

问题描述 投票:0回答:2

如果我指定一个返回泛型类的方法,我该怎么做才能动态指定泛型类的类型? 例如

  try {
        Class c =Class.forName(keytype);
        Class d= Class.forName(valuetype);
        KafkaConsumer<c,d> consumerconsumer = new KafkaConsumer<c,d>(PropertiesUtil.getPropsObj(configPath));
        return consumer ;
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }


}

但是上面的代码不行。我怎样才能做到这一点?

java generics kafka-consumer-api
2个回答
2
投票

通用语法仅适用于编译时。泛型类或方法中的任何类型在运行时都不可用。这称为类型擦除。所以你不能做你想做的事,至少不能这样。

根据您尝试解决的原始问题,您也许可以使用 通配符


2
投票

您可以让您的键和值类各自实现一个已知的接口。 然后您可以分配或投射它。

KafkaConsumer<IKeyType,IValueType> consumerconsumer = new KafkaConsumer<>(PropertiesUtil.getPropsObj(configPath));

KafkaConsumer<IKeyType,IValueType> consumerconsumer1 = (KafkaConsumer<IKeyType,IValueType>) new KafkaConsumer(PropertiesUtil.getPropsObj(configPath));

阅读此处有关对泛型进行限制的信息。 https://docs.oracle.com/javase/tutorial/java/generics/wildcards.html

© www.soinside.com 2019 - 2024. All rights reserved.