尝试使用值来获取方法的参数

时间:2017-02-28 09:18:02

标签: java methods reflection parameters instrumentation

我想保存传递给方法的参数的值和类型。

这是我正在做的更大项目的要求。所以,现在我需要按照方法签名中声明的顺序保存参数的值和类型,就在方法体的第一行。但是,我不知道论点的数量。 因此,我正在寻找一种JAVA技术,该技术将所有方法参数与其相应的值一起使用。

参数的数量可能非常大,参数名称也不知道。

如果不能直接发生这种情况,任何关于如何做到这一点的建议都会有所帮助。

public void stay(String temp1, int temp2, double temp3){

    //**--code to save the values of temp1, temp2, temp3 somehow--**

    //method body that will change the value of parameters
}

编辑1: 上面提到的stay方法可以是任何内容,我无法显式更改其代码。我正在使用检测在方法体中添加几行代码。这样,我想在方法体中添加某些代码段(逻辑上在开头),这样可以保存参数值。保存可以以JSON格式进行。可以使用javassist了解它们的类型。但瓶颈是知道参数的值。

用另一种方式: 如果要将方法的参数值存储在列表中(在方法内声明),您会怎么做?由于参数数量很多,我们无法真正对该过程进行硬编码。 谢谢。

1 个答案:

答案 0 :(得分:0)

我不确定你的问题,但我想我有一个答案。

您是否想要调用具有未知类型参数的函数?

按如下方式实施您的课程:

public class SomeClass {
    public void someFuntion(Object... objects)
    {
        for (int i = 0; i < objects.length; i++) {
            Object object = objects[i];
            if(object != null)
                System.out.println("Argument " + i + ": " + object.toString() + " (" + object.getClass().getSimpleName() + ")");
            else
                System.out.println("Argument " + i + ": null");
        }
    }
}

然后,使用以下命令调用此类:

SomeClass someClass = new SomeClass();
someClass.someFuntion("test", 8, new SomeClass());

输出将是:

  

参数0:test(String)

     

参数1:8(整数)

     

参数2:app.SomeClass@55f96302(SomeClass)

希望它可以帮到你!

编辑:如果要将结果序列化为JSON结构,可以将其存储为JSON数组,例如。

EDIT2 :或者将您的逗留方式替换为:

public void stay(Object... objects)

现在,您可以在stay方法中的 objects 数组中使用stay方法的参数。