Java examples for Reflection:Method Return
Returns the descriptor for the passed member
//package com.java2s; import java.lang.reflect.Constructor; import java.lang.reflect.Member; import java.lang.reflect.Method; public class Main { /**//from w w w .ja v a2 s .c o m * Returns the descriptor for the passed member * @param m The class member * @return the member descriptor */ public static String getMemberDescriptor(final Member m) { if (m instanceof Method) { return getMethodDescriptor((Method) m); } else if (m instanceof Constructor) { return getConstructorDescriptor((Constructor) m); } else { return m.toString(); } } /** * Returns the descriptor corresponding to the given method. * @param m a {@link Method Method} object. * @return the descriptor of the given method. * (All credit to ObjectWeb ASM) * @author Eric Bruneton * @author Chris Nokleberg */ public static String getMethodDescriptor(final Method m) { Class<?>[] parameters = m.getParameterTypes(); StringBuffer buf = new StringBuffer(); buf.append('('); for (int i = 0; i < parameters.length; ++i) { getDescriptor(buf, parameters[i]); } buf.append(')'); getDescriptor(buf, m.getReturnType()); return buf.toString(); } /** * Returns the descriptor corresponding to the given constructor. * @param c a {@link Constructor Constructor} object. * @return the descriptor of the given constructor. * (All credit to ObjectWeb ASM) * @author Eric Bruneton * @author Chris Nokleberg */ public static String getConstructorDescriptor(final Constructor<?> c) { Class<?>[] parameters = c.getParameterTypes(); StringBuffer buf = new StringBuffer(); buf.append('('); for (int i = 0; i < parameters.length; ++i) { getDescriptor(buf, parameters[i]); } return buf.append(")V").toString(); } /** * Appends the descriptor of the given class to the given string buffer. * @param buf the string buffer to which the descriptor must be appended. * @param c the class whose descriptor must be computed. * (All credit to ObjectWeb ASM) * @author Eric Bruneton * @author Chris Nokleberg */ private static void getDescriptor(final StringBuffer buf, final Class<?> c) { Class<?> d = c; while (true) { if (d.isPrimitive()) { char car; if (d == Integer.TYPE) { car = 'I'; } else if (d == Void.TYPE) { car = 'V'; } else if (d == Boolean.TYPE) { car = 'Z'; } else if (d == Byte.TYPE) { car = 'B'; } else if (d == Character.TYPE) { car = 'C'; } else if (d == Short.TYPE) { car = 'S'; } else if (d == Double.TYPE) { car = 'D'; } else if (d == Float.TYPE) { car = 'F'; } else /* if (d == Long.TYPE) */{ car = 'J'; } buf.append(car); return; } else if (d.isArray()) { buf.append('['); d = d.getComponentType(); } else { buf.append('L'); String name = d.getName(); int len = name.length(); for (int i = 0; i < len; ++i) { char car = name.charAt(i); buf.append(car == '.' ? '/' : car); } buf.append(';'); return; } } } }