我有以下课程:
class Processor<T> {
void process( T request ) {...}
}
然后我打电话给以下人员:
Processor<String> p = Processor.class.newInstance();
Eclipse抱怨,作为对 Processor.class.newInstance()的警告:
&#34;类型安全:处理器类型的表达式需要取消选中 转换为符合处理器&lt;串GT;&#34;
如何为此表达式指定模板参数?类似的东西:
Processor<String> p = Processor.class.newInstance<String>();
答案 0 :(得分:0)
通过使用供应商,您已在评论中回答了警告的原因,可在Java 8中找到:
class Ideone {
public static void main(String[] args) {
ProcessorFactory<Processor<String>> pf =
new ProcessorFactory(Processor<String>::new);
Processor<String> p = pf.build();
p.process("Ciao!");
}
}
class Processor<T> {
void process( T request ) {
System.out.println(request);
}
}
class ProcessorFactory<T> {
private Supplier<T> supplier;
ProcessorFactory(Supplier<T> supplier) {
this.supplier = supplier;
}
T build() {
return supplier.get();
}
}
基本上,您将生成委托给外部工厂主力,通过Supplier
获取馈送类型,Processor<String>::new
是对构造函数的参考(参数化)。
这么小的好处是很多工作,我不确定我会这样做。
答案 1 :(得分:0)
我给出了Processor
的一些未知具体实现的类对象
而不是尝试
Processor<String> processor = ConcreteProcessor.class.newInstance(); //warning
您可以简单地使用您拥有的类对象:
Processor<String> processor = classOfConcreteProcessor.newInstance();
取决于更大的系统&#39;你提到过,类型信息是否可用。
如果在您的情况下无法进行类型推断,您将