2017-02-28 2 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:テスト(String)を

引数1:8(整数)

引数2:[email protected](工ass)

それはあなたのお役に立てば幸い!

EDIT:結果をJSON構造としてシリアル化する場合は、JSON配列として保存することができます。

EDIT2:またはにご滞在のメソッドを置き換える:滞在方法の今

public void stay(Object... objects) 

とあなたのパラメータはオブジェクト滞在メソッド内アレイ上で利用可能です。

+0

これは私が到達したいところです。私は同じようなステップを考えました。しかし、私が欲しいのは: 'someClass.someFuntion(" test "、8、新しいSomeClass());' これは私の指定されたメソッドのパラメータで渡されるべきです 'someClass.someFuntion(temp1、temp2、temp3) ' ここで、temp1、temp2、temp3は' stay'メソッドのパラメータです。 – Gautam

+0

忍耐力を見せていただきありがとうございます。しかし、この制約があります(問題のコメントにも言及されています)、私は 'stay'のコードを変更できません。私は質問をより明確にし、親切にそれを一度行ってみようとしました。私はそれが助けてくれることを願っています。 – Gautam

+0

**(編集可能な)**コードで_stay_メソッドを呼び出しましたか?はいの場合は、メソッドの呼び出しの前にパラメータを保存してください。それ以外の場合は、[Java reflection documentation](http://docs.oracle.com/javase/tutorial/reflect/index.html)を参照してください。 –

関連する問題