java无法用常规类实例化该类型
所以我有一门课:
public class DynQSimModule<T extends Mobsim> extends AbstractModule
{
private Class<? extends javax.inject.Provider<? extends T>> providerClass;
public DynQSimModule(Class<? extends javax.inject.Provider<? extends T>> providerClass)
{
this.providerClass = providerClass;
}
//some methods down here
}
当我试着打电话时:
controler.addOverridingModule(new DynQSimModule<>(AMoDQSimProvider.class));
Eclipse告诉我它“无法推断DynQSimModule<;>;的类型参数。我理解这是因为我没有在<;>;中放入任何内容,但我构建的示例代码使用了相同的精确语法,运行非常好
当我输入如下内容时:
controler.addOverridingModule(new DynQSimModule<? extends Mobsim(AMoDQSimProvider.class));
Eclipse告诉我:“无法实例化类型DynQSimModule。”
我知道当您尝试实例化一个接口或抽象类时,这是一个问题,但是DynQSimModule不是这些
任何帮助都会很好
谢谢
# 1 楼答案
我想您正在使用JDK 7。如果是这种情况,
new DynQSimModule<>(AMoDQSimProvider.class)
将不会编译,因为Java7不使用目标类型来推断所传递参数的类型new DynQSimModule<? extends Mobsim>(AMoDQSimProvider.class)
也不会编译,因为不能在对象创建中使用通配符要解决这个问题,您必须在
new DynQSimModule<>(...)
中提供确切的类型,或者如果可能,您可以升级到提供目标类型推断功能的Java8例如,下面的代码不会在Java 7中编译,而是在Java 8+中编译:
更多关于Java8Target Type Inference