Sto provando a fare questo esercizio usando la reflection:
Implementare una classe generica MiniInterprete i cui oggetti sono costruiti a partire da un oggetto del tipo generico specificato
La classe espone il metodo parse che, data una stringa nel formato nomeMetodo(param1, ..., paramN), invoca il corrispondente metodo con N parametri
– Si assuma che i tipi dei parametri siano scelti tra: Integer, Boolean, String e Double
– Si assuma che non esista più di un metodo con lo stesso nome e N parametri
– Si gestiscano le eccezioni in modo appropriato
Ad esempio:
– new MiniInterprete(“ciao”).parse(“length()”) restituisce 4
– new MiniInterprete(“ciao”).parse(“charAt(3)”) restituisce ‘o’

Il codice che ho scritto però non funziona:
codice:
import java.lang.reflect.*;


public class MiniInterprete<T> {

	Class<?> c;
	T valore;
	
	public MiniInterprete (Class<T> type, T valore){		
		c=valore.getClass();
	
	}
	
	public Object parse(String stringa){
		int spazi=0;
		char temp=stringa.charAt(0);
		for(int i=0;i<stringa.length() && temp!='(';i++){
			temp=stringa.charAt(i);
			spazi++;
		}
			
		String nomeMetodo=stringa.substring(0, spazi-1);
		String listaParametri=stringa.substring(spazi, stringa.length()-1);
		
		Object[] parametri=listaParametri.split(",");
		
		Method[] metodi=c.getDeclaredMethods();

		try {
			for(Method m: metodi)
				if(m.getName().equals(nomeMetodo))					
					return m.invoke(valore, parametri);
				
		}  catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		return null;
	}
	
	
	public static void main(String[] args) {
		String s="length()";

		MiniInterprete<String> mini=new MiniInterprete<String>(String.class,"ciao");
		System.out.println(mini.parse(s));
	}

}
Quando l'esecuzione arriva a return m.invoke(valore, parametri); mi solleva questa eccezione
Exception in thread "main" java.lang.NullPointerException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at MiniInterprete.parse(MiniInterprete.java:32)
at MiniInterprete.main(MiniInterprete.java:57)

Perchè non riesce ad invocare il metodo?
Grazie