Class <someobject>只有一个实例吗?

时间:2015-09-11 11:34:52

标签: java

Class<SomeObject>只有一个SomeObject.class的实例吗?

这是一个功能

void f(Class<SomeObject> arg)

是否可以仅传递SomeObject.class,否则编译时错误?

4 个答案:

答案 0 :(得分:8)

正如documentation所描述的那样:

  

返回此Object的运行时类。返回的Class对象是   由静态同步方法锁定的对象   代表班级。

但是对于方法void f(Class<SomeObject> arg),您可以传递void f(Class<? extends SomeObject> arg)。看this question

传递Class<? extends SomeObject arg你可以做类似的事情:

myMethod(Class<? extends BasicObject> clazz)
{
    if (!clazz.isInstance(CodeObject))
    {
        (do something different)
    }
    ...
}

答案 1 :(得分:3)

您始终可以传递null,但除此之外,是的唯一有效参数是SomeObject.class,其中包含的ClassLoader与包含void f(Class<SomeObject> clazz)的类相同

您可以拥有SomeObject.class的多个不同实例,但它们需要由不同的类加载器加载(否则它们将不是单独的实例,但所有实例都将引用相同的Class对象)。

答案 2 :(得分:0)

  1. 也许你这样的事情?

    类&LT; ?扩展SomeObject&gt;

  2. 这是SomeObject类的符号或覆盖(语法高亮显示有问题,不接受?,&lt;?之间的空格不是必需的)

答案 3 :(得分:0)

似乎每个类只有一个对应的Class实例,请参见this discussion

不幸的是,您的方法也可以由原始Class参数调用。

Class clazz = AnotherClass.class;

f(clazz);