【发布时间】:2015-09-11 11:34:52
【问题描述】:
Class<SomeObject> 是否只有一个实例 SomeObject.class?
那是一个函数
void f(Class<SomeObject> arg)
是否可以只传递SomeObject.class 否则编译时错误?
【问题讨论】:
标签: java
Class<SomeObject> 是否只有一个实例 SomeObject.class?
那是一个函数
void f(Class<SomeObject> arg)
是否可以只传递SomeObject.class 否则编译时错误?
【问题讨论】:
标签: java
是的。
如documentation 所述:
返回此对象的运行时类。返回的 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)
}
...
}
【讨论】:
MyClass<T> 和 init(Class<T> clazz) 方法,然后你会从它扩展,或者类似的东西。
您始终可以传递null,但除此之外,唯一有效的参数是SomeObject.class,它与包含void f(Class<SomeObject> clazz) 的类加载了相同的ClassLoader。
您可以拥有多个不同的 SomeObject.class 实例,但它们需要由不同的类加载器加载(否则它们将不是单独的实例,而是都引用同一个 Class 对象)。
【讨论】:
是
也许你是这样的?
类
这是SomeObject 类的符号或覆盖(语法荧光笔有问题,不接受?,
【讨论】:
每个类似乎确实只有一个对应的Class 实例,请参阅this discussion
不幸的是,您的方法也可能被原始的Class 参数调用:)。
Class clazz = AnotherClass.class;
f(clazz);
【讨论】: