Class<SomeObject>
只有一个SomeObject.class
的实例吗?
这是一个功能
void f(Class<SomeObject> arg)
是否可以仅传递SomeObject.class
,否则编译时错误?
答案 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)
是
也许你这样的事情?
类&LT; ?扩展SomeObject&gt;
这是SomeObject
类的符号或覆盖(语法高亮显示有问题,不接受?,&lt;?之间的空格不是必需的)
答案 3 :(得分:0)
似乎每个类只有一个对应的Class
实例,请参见this discussion
不幸的是,您的方法也可以由原始Class
参数调用。
Class clazz = AnotherClass.class;
f(clazz);