我正在尝试创建一个工厂(从String参数生成新实例).
我有一个Monster类(超类)和Robot1类(扩展了Monster).
我的工厂声明:
private static final ImmutableMap<String, Class<? extends Monster>> DISPATCHER = ImmutableMap.of("robot1", Robot1.class);
Run Code Online (Sandbox Code Playgroud)
但我得到:
Type mismatch: cannot convert from ImmutableMap<String,Class<Robot1>> to ImmutableMap<String,Class<? extends Monster>>
Run Code Online (Sandbox Code Playgroud)
这样就足够了
private static final ImmutableMap<String, Class<? extends Monster>> DISPATCHER =
ImmutableMap.of("robot1", (Class<? extends Monster>) Robot1.class);
Run Code Online (Sandbox Code Playgroud)
Java倾向于假设您希望尽可能使用最具体的类型,即使您不这样做.这个upcast不会产生任何警告,因为它非常安全 - 它只是告诉Java编译器你想要更通用的类型.