Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Reflection: risalire al metodo

    Avendo a disposizione a una stringa del tipo:
    "public void tlsp.tests.ClassB.a2(int)"
    oppure volendo direttamente il riferimento Class clazz = ClassB.class, il nome del metodo "a2" ed un array dei tipi dei parametri come posso risalire all'oggetto Method per favore?
    Il problema è che l'array dei tipi ha "Integer" al posto di int.class a quanto pare, quindi se provo a fare clazz.getMethod("a2", arrayTipiParametri) non trova nulla perchè Integer.class non è int.class.

    Grazie.
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  2. #2
    Facendo un parsing delle stringhe che rappresentano gli argomenti dovrebbe bastare risalire alla classe in base al nome con un Class.forName, ma non riconosce i tipi primitivi come "int".
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  3. #3
    Me la son cavata brutalmente così:

    codice:
    private Class[] extractParameters(String signature) {
    		int start = signature.indexOf('(') + 1;
    		int end = signature.indexOf(')');
    		signature = signature.substring(start, end);
    		List<Class> l_p = new LinkedList<Class>();
    		for (String s : signature.split("[ ]*,[ ]*")) {
    			try {
    				if (s.equals(""))
    					break;
    				l_p.add(Class.forName(s));
    			} catch (ClassNotFoundException e) {
    				if (s.equals("int"))
    					l_p.add(int.class);
    				else if (s.equals("byte"))
    					l_p.add(byte.class);
    				else if (s.equals("short"))
    					l_p.add(short.class);
    				else if (s.equals("long"))
    					l_p.add(long.class);
    				else if (s.equals("float"))
    					l_p.add(float.class);
    				else if (s.equals("double"))
    					l_p.add(double.class);
    				else if (s.equals("boolean"))
    					l_p.add(boolean.class);
    				else if (s.equals("char"))
    					l_p.add(char.class);
    				else
    					throw new RuntimeException(
    							"Impossibile risalire al tipo del parametro.");
    			}
    		}
    		Class[] p = new Class[l_p.size()];
    		p = l_p.toArray(p);
    		return p;
    	}
    Funzionare funziona, anche se non mi sembra proprio il massimo...
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.