在switch语句中使用java.lang.Class <?>

Cli*_*ote 3 java generics

我正在尝试Class<?>在if语句中使用,如下所示:

public static Model get(Class<? extends FooBase> type, long id )
{
    switch (type)
    {
        case FooType.class:
            return new Foo(id);
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这行:case FooType.class:给我错误,

Expected Class<capture<? extends FooBase>> , given Class<FooType.class>

FooType确实实现了该FooBase接口。

不能打开Class<?>数值吗?

rge*_*man 5

Class根据JLS,第14.11节,您不能将a 用作switch语句的表达式:

表达式的类型必须为char,byte,short,int,Character,Byte,Short,Integer,String或枚举类型(第8.9节),否则会发生编译时错误。

您可以Class直接比较对象。因为Class每个实际的类只有一个对象,所以==操作员在这里工作。

if (type == FooType.class)
Run Code Online (Sandbox Code Playgroud)