`String.class`和`new Class [] {String.class}`有什么区别?

xml*_*lmx 3 java reflection constructor types

我是Java的新手.我有一个问题如下:

class MyClass
{
    public MyClass(String s){}
}

MyClass MyObject;

Constructor ctor1 = MyObject.class.getConstructor(String.class); // #1
Constructor ctor2 = MyObject.class.getConstructor(new Class[]{String.class}); // #2
Run Code Online (Sandbox Code Playgroud)

#1#2有什么区别?

Boh*_*ian 6

没有区别.

参数类型getConstructor()Class<?>...,它使用varargs语法,这是一种语法糖,可以自动将任何大小的元素列表(包括零)转换为数组.

为了说明,这两个调用是等效的:

Constructor ctor1 = MyObject.class.getConstructor(String.class, Integer.class); // #1
Constructor ctor2 = MyObject.class.getConstructor(new Class[]{String.class, Integer.class}); // #2
Run Code Online (Sandbox Code Playgroud)

虽然我很佩服你"深思熟虑"(使用反思)的热情,但如果你是java新手,你可以考虑等到你在学习如何绕过它们之前牢牢掌握基础知识.