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

时间:2014-03-04 23:52:10

标签: java generics

我正在尝试在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<?>值?

1 个答案:

答案 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)