package ref;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
public class Ref {
public static Object newInstance(String className, Object[] args){
try {
Class c = Class.forName("mods.C");
Class[] argClasses = Ref.getArgClasses(args);
Constructor cons = Ref.getConstructor(c, argClasses);
return (Object)(cons.newInstance(args));
}
catch(ClassNotFoundException e){
return null;
}
catch(NoSuchMethodException e){
return null;
}
catch(InstantiationException e){
return null;
}
catch(IllegalAccessException e){
return null;
}
catch(InvocationTargetException e){
return null;
}
}
public static Object invokeMethod(
Object target, String methodName, Object[] args){
Method m;
try {
Class[] argClasses = Ref.getArgClasses(args);
m = target.getClass().getMethod(methodName, argClasses);
}
catch(SecurityException e){
return null;
}
catch(NoSuchMethodException e){
return null;
}
Object r;
try {
r = m.invoke(target, args);
}
catch(IllegalArgumentException e){
return null;
}
catch(IllegalAccessException e){
return null;
}
catch(InvocationTargetException e){
return null;
}
return r;
}
private static Class[] getArgClasses(Object[] args){
Class[] argClasses = new Class[ args.length ];
for(int i = 0; i < args.length; i++){
argClasses[ i ] = args[ i ].getClass();
}
return argClasses;
}
@SuppressWarnings("unchecked")
private static Constructor getConstructor(
Class c, Class[] args) throws NoSuchMethodException{
return c.getConstructor(args);
}
}