【发布时间】:2017-07-10 00:33:47
【问题描述】:
我正在尝试为名称作为字符串传入的类创建一个 SpecificDatumReader。我可以创建其中一个类,并且可以获取此类的 Class,但实际上这些都不允许我创建模板化对象。
String[] classList = conf.getClasslist(eventname);
decoders = new LinkedList<SpecificDatumReader>();
for (String className : classList)
{
Class<?> eventclass = Class.forName(className);
Object holder = eventclass.newInstance();
decoders.add(new SpecificDatumReader<WhatGoesHere?>(eventclass));
}
【问题讨论】:
-
Java 没有模板类型,泛型是一种编译时类型检查功能(另请参阅类型擦除)。
-
不要使用原始类型。
-
鉴于(正如 Elliott 所说)泛型是一种编译类型检查功能,我不相信您需要在创建对象时告诉程序类型参数是什么,因为它无论如何都不会存储在您的列表中。所以只要
new SpecificDatumReader<Object>(whatever)应该可以正常工作。 -
我在这里得到了相互矛盾的建议。 Shmosel 坚持我不应该使用原始类型,但其他 cmets 告诉我指定是不可能的。指定
-
@RobertRapplean 它关闭了关于原始类型的编译器;-)
标签: java templates reflection