如何获取对象的构造函数的参数名称(反射)? - java

说我以某种方式从另一个类获得了对象引用:

Object myObj = anObject;

现在,我可以获取该对象的类:

Class objClass = myObj.getClass();

现在,我可以获得该类的所有构造函数:

Constructor[] constructors = objClass.getConstructors();

现在,我可以循环每个构造函数:

if (constructors.length > 0)
{
    for (int i = 0; i < constructors.length; i++)
    {
        System.out.println(constructors[i]);
    }
}

这已经为我很好地总结了构造函数,例如,构造函数public Test(String paramName)显示为public Test(java.lang.String)

但是,我不想获取类的类型,而是要获取参数的名称。在这种情况下,为“paramName”。我该怎么做?我尝试了以下操作,但未成功:

if (constructors.length > 0)
    {
        for (int iCon = 0; iCon < constructors.length; iCon++)
        {
            Class[] params = constructors[iCon].getParameterTypes();
            if (params.length > 0)
            {
                for (int iPar = 0; iPar < params.length; iPar++)
                {
                    Field fields[] = params[iPar].getDeclaredFields();
                    for (int iFields = 0; iFields < fields.length; iFields++)
                    {
                        String fieldName = fields[i].getName();
                        System.out.println(fieldName);
                    }                                       
                }
            }
        }
    }

不幸的是,这没有给我预期的结果。谁能告诉我该怎么做或我做错了什么?谢谢!

参考方案

该信息在编译后会丢失,并且无法在运行时检索。

为什么我不能在Java中重写方法wait()? - java

Improve this question 我在类wait()中找到了方法Object。这是最终的,这意味着该方法不能被覆盖。有什么想法为什么是最终的? 参考方案 @Flavio-这实际上是一个很好的问题。当然,您不能覆盖它的原因是设计师将其“确定为最终”。做出此决定的一些潜在原因:您不希望人们弄乱基本类(“对象”类)上基本操作的语义。由于它是“最终的”,因…

Web应用程序上的恶意用户是否可以操纵Web应用程序前端发送的输入(在表单数据旁边)? - java

Web应用程序上的恶意用户是否可以通过任何可能的方式来操纵Web应用程序前端发送的输入(当然,这不是在谈论FORM DATA),但是发送的请求例如当我允许他编辑他的个人资料或他的内容时,他可能会操纵ID(userId或contentId),从而可能恶意地对其他用户的内容进行邪恶?这些输入固定在网页上并且不可编辑,但用户仍然可以操纵它们吗?用户是否可能以这种方…

PHP或Java中的WCMS(适用于Java开发人员)? - java

在我公司,我们是一个Java开发人员团队。对于项目,我们需要首先选择一个Web内容管理系统(wcms)。我们可以选择一个php吗?我们是否将不得不学习php,因为我们的客户有一些特殊需求,所以我们可能不得不插入我们自己的功能...还是可以在Java中添加插件并找到连接它们的方法?这样做很普遍吗?考虑到我们的时间,我们负担不起学习php您认为我们最好转向Jav…

什么时候在Hibernate中调用flush()和commit()? - java

我有以下情况: openSession() tx = session.beginTransaction(); try { ... session.saveOrUpdate(obj_1); ... session.saveOrUpdate(obj_2); ... session.saveOrUpdate(obj_3); session.flush(); tx.…

如果没有它,为什么还要使用collect(Collectors.toList())? - java

我在许多Java 8参考资料和示例中都看到了以下代码:List <Integer> l = Arrays.asList(7, 3, 9, 8, 6, 5, -1, -100); l.stream().filter(y -> y <l.get(0)).collect(Collectors.toList()). forEach(Syste…