2017-02-28 3 views
0

Je souhaite enregistrer les valeurs et les types d'arguments transmis à une méthode.Essayer d'inscrire les arguments d'une méthode avec les valeurs

Ceci est une exigence d'un plus grand projet que je fais. Donc, actuellement, j'ai besoin de sauvegarder les valeurs et les types d'arguments, dans l'ordre où ils sont déclarés dans la signature de la méthode, directement à la première ligne du corps de la méthode. Cependant, je ne connaîtrai pas le nombre d'arguments. Je suis donc à la recherche d'une technique JAVA qui utilise tous ses paramètres de méthode avec leur valeur correspondante.

Le nombre d'arguments peut être très important et les noms d'arguments ne seraient pas connus.

Si cela ne peut pas arriver directement, toute suggestion sur la façon dont cela pourrait être fait sera utile.

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: La méthode stay mentionné ci-dessus peut être quelque chose et je ne peux pas changer explicitement son code. J'utilise l'instrumentation pour ajouter quelques lignes de code dans le corps de la méthode. De cette façon, je veux ajouter un certain segment de code dans le corps de la méthode (logiquement au début) qui enregistre les valeurs des paramètres. L'enregistrement peut avoir lieu au format JSON. Leurs types peuvent être connus en utilisant javassist. Mais le goulot d'étranglement est de connaître les valeurs des paramètres.

En d'autres termes: Que ferez-vous si vous voulez stocker les valeurs de paramètres d'une méthode dans une liste (qui est déclarée dans la méthode)? Puisque les paramètres peuvent être nombreux, nous ne pouvons pas réellement coder le processus. Merci.

+1

Que voulez-vous dire par "sauvegarder" ou "s'enrôler" exactement? Ne pouvez-vous pas simplement les stocker dans des variables de niveau classe? –

+0

Je veux enregistrer les valeurs des paramètres avant qu'ils ne soient modifiés dans le corps de la méthode. Je veux stocker les valeurs des paramètres dans une liste, de sorte que, si je veux rappeler la méthode dans le futur, je connais les types d'arguments dans un ordre spécifié et leur valeur sauvegardée, je peux appeler la méthode sans avoir besoin pour atteindre le programme au point où la méthode a été appelée. Même pour les stocker dans une variable de niveau classe, je devrai connaître le nombre de paramètres et leurs noms. Est-ce que je me suis fait comprendre? – Gautam

+0

Comment ne connaitrez-vous pas le nombre de params, car le nombre et le type de paramètres d'une méthode sont définis au moment de la compilation? Et qu'en est-il des objets transmis en tant que paramètres? Aurez-vous besoin de les stocker dans leur état d'origine? –

Répondre

0

Je ne suis pas sûr de votre question, mais je suppose que j'ai une réponse pour vous.

Voulez-vous appeler une fonction avec des types de paramètres inconnus?

Mettre en œuvre votre classe comme ci-dessous:

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"); 
     } 
    } 
} 

Ensuite, appelez cette classe avec:

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

La sortie sera:

Argument 0: test (String)

Argument 1: 8 (entier)

Argument 2: [email protected] (SomeClass)

espérons qu'il vous aidera!

EDIT: si vous souhaitez sérialiser le résultat en tant que structure JSON, vous pouvez le stocker en tant que tableau JSON, par exemple.

EDIT2: Ou remplacer votre méthode de séjour pour:

public void stay(Object... objects) 

et maintenant vos paramètres de méthode de séjour sont disponibles sur objets tableau dans la méthode de séjour.

+0

Ceci est vers où je veux atteindre. J'ai pensé à un pas similaire. Cependant, ce que je veux est: 'someClass.someFuntion (" test ", 8, new SomeClass());' Cela doit être passé avec les paramètres de la méthode spécifiée 'someClass.someFuntion (temp1, temp2, temp3) ' où temp1, temp2, temp3 sont les paramètres de la méthode' stay'. – Gautam

+0

Merci de votre patience. Cependant, il y a cette contrainte (mentionnée dans les commentaires à la question aussi), que je ne peux pas changer le code de 'stay'. J'ai essayé de clarifier la question, je vais la passer une fois, j'espère que cela aidera. – Gautam

+0

Avez-vous appelé la méthode _stay_ dans ** votre ** code (éditable)? Si oui, il suffit de stocker les paramètres avant l'appel de la méthode. Sinon, jetez un coup d'œil sur [Java reflection documentation] (http://docs.oracle.com/javase/tutorial/reflect/index.html). –