首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"getConstructor()“和"getConstructor((Class<?>[]) null)”之间的区别是什么?

"getConstructor()“和"getConstructor((Class<?>[]) null)”之间的区别是什么?
EN

Stack Overflow用户
提问于 2015-07-14 10:26:03
回答 4查看 1.2K关注 0票数 4

我试着用这个例子来理解这个区别:

代码语言:javascript
复制
import java.lang.reflect.*;
public class ClassDemo {

   public static void main(String[] args) {
     try {
        // returns the Constructor object of the public constructor
        //Class cls[] = new Class[] { String.class };
        Constructor c = String.class.getConstructor();
        System.out.println(c);
     }
     catch(Exception e) {
        System.out.println(e);
     } 
   }
} 

我得到了这个结果:

公共java.lang.String()

在本例中,如果我替换:

代码语言:javascript
复制
Constructor c = String.class.getConstructor();

出自:

代码语言:javascript
复制
Constructor c = String.class.getConstructor((Class<?>[]) null);

我得到了同样的结果..。

为什么和什么是微妙的?

提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-14 10:36:26

他们做的事情完全一样。

当您调用String.class.getConstructor()时,实际上有一个空的Class<?>数组作为参数。这等于使用(Class<?>[]) null调用它,可以通过检查它将类型参数与构造函数中的参数进行比较的方式来查看:

代码语言:javascript
复制
private static boolean arrayContentsEq(Object[] a1, Object[] a2) {
    if (a1 == null) {
        return a2 == null || a2.length == 0;
    }

    if (a2 == null) {
        return a1.length == 0;
    }

    if (a1.length != a2.length) {
        return false;
    }

    for (int i = 0; i < a1.length; i++) {
        if (a1[i] != a2[i]) {
            return false;
        }
    }

    return true;
}

如您所见,空数组和空值被视为相等。您也可以使用new Class<?>[0]作为参数来调用它。

票数 4
EN

Stack Overflow用户

发布于 2015-07-14 10:33:23

没有区别,因为它是相同的方法,Class.getConstructor(班级.parameterTypes)。允许在没有参数的情况下调用此方法。这些被称为瓦拉格

票数 1
EN

Stack Overflow用户

发布于 2015-07-14 10:33:34

看看手册就行了。

public java.lang.reflect.Constructor getConstructor(java.lang.Class[] parameterTypes)

它采用构造函数参数的类型。在构造函数重载的情况下,需要它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31404035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档