Here you can find the source of getMethodSignature(Method m)
protected static String getMethodSignature(Method m)
//package com.java2s; /**//from w w w. j ava2s.c o m * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import java.lang.reflect.GenericArrayType; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.TypeVariable; import java.lang.reflect.WildcardType; import java.util.HashMap; import java.util.Map; public class Main { protected static final Map<Class<?>, String> PRIMITIVE_MAP = new HashMap<Class<?>, String>(); protected static String getMethodSignature(Method m) { StringBuilder buf = new StringBuilder("("); for (Class<?> cl : m.getParameterTypes()) { buf.append(getClassCode(cl)); } buf.append(")"); buf.append(getClassCode(m.getReturnType())); return buf.toString(); } public static String getClassCode(Class<?> cl) { if (cl == Void.TYPE) { return "V"; } if (cl.isPrimitive()) { return PRIMITIVE_MAP.get(cl); } if (cl.isArray()) { return "[" + getClassCode(cl.getComponentType()); } return "L" + periodToSlashes(cl.getName()) + ";"; } public static String getClassCode(java.lang.reflect.Type type) { if (type instanceof Class) { return getClassCode((Class<?>) type); } else if (type instanceof GenericArrayType) { GenericArrayType at = (GenericArrayType) type; return "[" + getClassCode(at.getGenericComponentType()); } else if (type instanceof TypeVariable) { TypeVariable<?> tv = (TypeVariable<?>) type; java.lang.reflect.Type[] bounds = tv.getBounds(); if (bounds != null && bounds.length == 1) { return getClassCode(bounds[0]); } else { throw new IllegalArgumentException("Unable to determine type for: " + tv); } } else if (type instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) type; StringBuilder a = new StringBuilder(getClassCode(pt.getRawType())); if (!pt.getRawType().equals(Enum.class)) { a.setLength(a.length() - 1); a.append('<'); for (java.lang.reflect.Type t : pt.getActualTypeArguments()) { a.append(getClassCode(t)); } a.append(">;"); } return a.toString(); } else if (type instanceof WildcardType) { WildcardType wt = (WildcardType) type; StringBuilder a = new StringBuilder(); java.lang.reflect.Type[] lowBounds = wt.getLowerBounds(); java.lang.reflect.Type[] upBounds = wt.getUpperBounds(); for (java.lang.reflect.Type t : upBounds) { a.append("+"); a.append(getClassCode(t)); } for (java.lang.reflect.Type t : lowBounds) { a.append("-"); a.append(getClassCode(t)); } return a.toString(); } return null; } public static String periodToSlashes(String s) { char ch[] = s.toCharArray(); for (int x = 0; x < ch.length; x++) { if (ch[x] == '.') { ch[x] = '/'; } } return new String(ch); } }