我见过很多 Java 代码示例,它们将* .class作为参数传递给构造函数函数。我为什么要这么做?我什么时候会这样做?
例如:
ServletHolder sh = new ServletHolder(ServletContainer.class);
答案 0 :(得分:3)
通常这用于允许Java中的Reflection创建传入的类的具体版本。例如,Arrays.copyOfRange(...)
有一个重载,它接受一个类参数来返回一个用Class []键入的实际数组。传递给方法。
如果没有参数,它将返回Object[]
。使用该参数,它将返回一个这样的数组,例如SomeClass[]
。
答案 1 :(得分:1)
T.class
的类型为Class<T>
。它使您可以将类本身作为对象访问。 Oracle docs有许多不同的示例,说明如何获取Class<T>
对象。
他们通常会使用反射来对类本身进行一些元操作。有一个SO thread with some examples。
例如,我可能会定义一个Logger
对象,该对象将Class<T>
作为参数。然后它可以做以下事情:
class LoggerForClass<T> {
String className;
public LoggerForClass(Class<T> klass) {
className = klass.getName();
}
public String log(String message) {
return className + ": " + message;
}
}
答案 2 :(得分:1)
构造函数显然正在寻找一个类对象,但我想你可能会问一个更深层次的问题,为什么一个类的实例想知道一个不同的类。这有很多原因,但它们主要围绕反思。 Reflection允许程序按名称检查类的结构,它的构造函数,方法,接口等,然后能够调用它们。