当前位置: 首页 > 面试题库 >

如何使用getConstructor(params).newInstance(args)?

郝冥夜
2023-03-14
问题内容

这很可能是一个愚蠢的问题,但是我是Java的新手,所以…

我目前有一些代码,目前正在使用
clazz.asSubclass(asSubclassOfClass).getConstructor().newInstance()

我需要将一些参数传递给构造函数,因此我想将其更改为:
clazz.asSubclass(asSubclassOfClass).getConstructor(params).newInstance(args)

我不明白的是,我需要以 参数形式 传递什么,我需要以 args 传递什么。

假设我想传入一个字符串“ howdy”和一些名为XyzObj的XYZ类型的对象。我该如何指定呢?我将通过什么作为参数,而将通过什么作为参数?


问题答案:

在Java中,这称为Reflection。

假设该类具有此构造函数,否则我相信您将获得NoSuchMethod异常。

clazz.asSubclass(asSubclassOfClass)
    .getConstructor(String.class,XYZ.class)
    .newInstance("howdy",XyzObj);

既然您是Java的新手,那么让我给您一个简单的方法,以便您了解执行此操作时的实际情况。

假设您有以下课程:

public class ParentClazz{
        String someVar;
    public ParentClazz(){
        someVar="test";
    }
    public ParentClazz(String someVar){
        System.out.println("I have been invoked");
        this.someVar=someVar;
    }
}

然后,您具有以下主要方法:

public static void main(String[] args) throws ParseException, IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
           ParentClazz.class.asSubclass(ParentClazz.class).getConstructor(String.class).newInstance("howdy");
    }

如果运行此命令,您会注意到控制台输出打印消息-我已被调用。这意味着您使用反射调用了ParentClazz的构造函数。

如果方案允许您执行相同的操作,则可以使用标准的对象创建过程:

ParentClazz clazz = new ParentClazz("howdy");

希望这可以帮助您理解。



 类似资料:
  • 组件中传递的属性可以在块表达式中返回结果。 下表列出了使用块参数的不同方法 - S.No. BlockParam方式和描述 1 从具有yield的组件返回值 可以使用yield选项从组件返回值。 2 支持块和非块组件使用 您可以使用hasBlock属性支持单个组件使用块和非块组件。

  • 问题内容: 以下工作正常时,是和等,但它失败了,给了。 这是包装类或其他类的问题吗? 编辑:做到这一点的方式-学分应该去吉加尔。 问题答案: 因为没有no- arg(default)构造函数,所以将在内部调用默认构造函数

  • 问题内容: 我在Netbeans 7.2上遇到此错误,它说ClassNotFoundexception和InstantationException。我真的在这个问题上陷入困境。请帮助我。 问题答案: 那么这个简单的方法呢? 我也想知道为什么您要用这种方式连接数据库?最好让服务器对其进行管理。 首先像这样配置(如果您使用的是tomcat): 然后,简单地从servlet / etc中的该资源获取连接

  • 描述 (Description) java.lang.reflect.Constructor.newInstance(Object... initargs)方法使用此Constructor对象表示的构造函数,使用指定的初始化参数创建和初始化构造函数声明类的新实例。 各个参数自动展开以匹配原始形式参数,并且原始参数和参考参数都根据需要进行方法调用转换。 声明 (Declaration) 以下是jav

  • 我已经使用Kotlin创建了一个片段,您知道在Java中有一个方便的静态方法来设置片段参数。像这样: 我试图在Kotlin中使用一个同伴对象来实现这一点,因为它是静态的。以下是我到目前为止所做的编译: 如何传入?

  • 默认值为加粗项,所有参数不区分大小写。 Name Options switch *undefined, could be any valid macro name that's not defined in the shader priority default(128), could be any number between max(255) and min(0) stage default,