为什么在Java中在构造函数中传递.class名称

为什么在Java中在构造函数中传递.class名称,java,Java,我见过很多Java代码示例将*.class作为参数传递给构造函数。我为什么要这么做?我什么时候做 例如: ServletHolder sh = new ServletHolder(ServletContainer.class); 通常,这用于允许Java中的反射创建传入类的具体版本。例如,Arrays.copyOfRange(…)有一个重载,该重载使用类参数返回使用传递到方法中的类[]键入的实际数组 如果没有参数,它将返回一个对象[]。使用参数,它将返回如下数组,例如,SomeClass[]通

我见过很多Java代码示例将*.class作为参数传递给构造函数。我为什么要这么做?我什么时候做

例如:

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这样的事情?