为什么在Java中在构造函数中传递.class名称
我见过很多Java代码示例将*.class作为参数传递给构造函数。我为什么要这么做?我什么时候做 例如:为什么在Java中在构造函数中传递.class名称,java,Java,我见过很多Java代码示例将*.class作为参数传递给构造函数。我为什么要这么做?我什么时候做 例如: ServletHolder sh = new ServletHolder(ServletContainer.class); 通常,这用于允许Java中的反射创建传入类的具体版本。例如,Arrays.copyOfRange(…)有一个重载,该重载使用类参数返回使用传递到方法中的类[]键入的实际数组 如果没有参数,它将返回一个对象[]。使用参数,它将返回如下数组,例如,SomeClass[]通
ServletHolder sh = new ServletHolder(ServletContainer.class);
通常,这用于允许Java中的反射创建传入类的具体版本。例如,
Arrays.copyOfRange(…)
有一个重载,该重载使用类参数返回使用传递到方法中的类[]键入的实际数组
如果没有参数,它将返回一个
对象[]
。使用参数,它将返回如下数组,例如,SomeClass[]
通常用于允许Java中的反射创建传入类的具体版本。例如,Arrays.copyOfRange(…)
有一个重载,该重载使用类参数返回使用传递到方法中的类[]键入的实际数组
如果没有参数,它将返回一个
对象[]
。使用参数,它将返回如下数组,例如,SomeClass[]
T.class
的类型为class
。它允许您作为对象访问类本身。对于如何获得类
对象,有许多不同的示例
它们通常与反射一起用于对类本身进行一些元操作。这里有一个
例如,我可以定义一个记录器
对象,该对象将类
作为参数。然后它可以做如下事情:
class LoggerForClass<T> {
String className;
public LoggerForClass(Class<T> klass) {
className = klass.getName();
}
public String log(String message) {
return className + ": " + message;
}
}
class LoggerForClass{
字符串类名称;
公共LoggerForClass(klass级){
className=klass.getName();
}
公共字符串日志(字符串消息){
返回className+“:”+消息;
}
}
T.class
的类型为class
。它允许您作为对象访问类本身。对于如何获得类
对象,有许多不同的示例
它们通常与反射一起用于对类本身进行一些元操作。这里有一个
例如,我可以定义一个记录器
对象,该对象将类
作为参数。然后它可以做如下事情:
class LoggerForClass<T> {
String className;
public LoggerForClass(Class<T> klass) {
className = klass.getName();
}
public String log(String message) {
return className + ": " + message;
}
}
class LoggerForClass{
字符串类名称;
公共LoggerForClass(klass级){
className=klass.getName();
}
公共字符串日志(字符串消息){
返回className+“:”+消息;
}
}
构造函数显然在寻找类对象,但我认为您可能会问一个更深层次的问题,即为什么一个类的实例希望了解另一个类。这有很多原因,但它们主要围绕着反射。反射允许程序按名称检查类的结构、构造函数、方法、接口等,然后能够调用它们。构造函数显然在寻找类对象,但我认为您可能会问一个更深层次的问题,即为什么一个类的实例想知道另一个类。这有很多原因,但它们主要围绕着反射。反射允许程序按名称检查类的结构、构造函数、方法、接口等,然后能够调用它们。当构造函数请求类对象时,我可以传递类似ABC a=new ABC()的消息;我可以传递一个物体,对吗?为什么我要做像ABC.class这样的事情?当构造函数要求一个类对象时。然后我可以传递像abca=newabc()这样的东西;我可以传递一个物体,对吗?我为什么要做像ABC.class这样的事情?