我正在尝试在if语句中使用Class<?>
,如下所示:
public static Model get(Class<? extends FooBase> type, long id )
{
switch (type)
{
case FooType.class:
return new Foo(id);
break;
}
}
但是,行case FooType.class:
给了我错误,
Expected Class<capture<? extends FooBase>> , given Class<FooType.class>
。
FooType
确实实现了FooBase
接口。
是否无法切换Class<?>
值?
答案 0 :(得分:4)
根据the JLS, Section 14.11,您无法使用Class
作为switch语句的表达式:
Expression的类型必须是char,byte,short,int,Character,Byte,Short,Integer,String或枚举类型(第8.9节),否则会发生编译时错误。强>
您可以直接比较Class
个对象。因为每个实际类只有一个Class
个对象,所以==
运算符在这里工作。
if (type == FooType.class)