2017-02-28 57 views
0

争取用方法的参数我想保存传递给方法的参数的值和类型。试图用值

这是我正在做的一个更大项目的要求。所以,现在我需要按照它们在方法签名中声明的顺序保存参数的值和类型,就在方法体的第一行。但是,我不会知道参数的数量。 因此,我正在寻找一种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 
} 

EDIT 1: 上面提到的方法stay可以是任何事物,我不能明确地改变其代码。我正在使用工具在方法主体中添加几行代码。这样,我想在方法主体中添加一定的代码段(逻辑上在开头),它保存了参数的值。可以使用JSON格式进行保存。他们的类型可以通过使用javassist来知道。但瓶颈是要知道参数的值。

换个角度来看: 如果你想将一个方法的参数值存储在一个列表中(这是在方法中声明的),你会做什么?由于参数的数量可能很大,我们不能真正对过程进行硬编码。 谢谢。

+1

你是指“保存”还是“登记”的意思?你能不能把它们存储在类级变量中? –

+0

我想在参数的值在方法体中被更改之前保存它们的值。我想将参数的值存储在列表中,因此,如果我想在将来某个时候重新调用该方法,我知道指定顺序的参数类型及其保存的值,我可以调用该方法而不需要在调用方法的地方到达该程序。即使将它们存储在类级变量中,我也必须知道参数的数量以及它们的名称。 我让自己清楚了吗? – Gautam

+0

你怎么会不知道params的数量是多少,因为一个方法的params的数量和类型是在编译时设置的?那么作为参数传递的对象呢?你需要将它们保存在原始状态吗? –

回答

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:测试(字符串)

参数1:8(整数)

参数2:[email protected](SomeClass的)

希望它可以帮助你!例如,如果要将结果序列化为JSON结构,则可以将其存储为JSON数组。例如,如果要将结果序列化为JSON结构,则可以将其存储为JSON数组。

EDIT2:或更换您的住宿方法:

public void stay(Object... objects) 

和您的住宿方法的参数可在对象留法中阵列。

+0

这是我想要达到的地方。我想到了类似的步骤。然而,我想要的是: 'someClass.someFuntion(“test”,8,new SomeClass());' 这应该与我指定的方法参数 'someClass.someFuntion(temp1,temp2,temp3) ' 其中temp1,temp2,temp3是'stay'方法的参数。 – Gautam

+0

谢谢你表现出耐心。然而,这个限制(在评论中也提到了),我不能改变'stay'的代码。我试图让问题更清楚,善意地通过一次,我希望它有帮助。 – Gautam

+0

您是否在**您的**(可编辑)代码中调用了_stay_方法?如果是,只需在调用方法之前存储参数。否则,请查看[Java反射文档](http://docs.oracle.com/javase/tutorial/reflect/index.html)。 –