Java 如何在类中搜索重载方法

Java 如何在类中搜索重载方法,java,eclipse,search,ide,signature,Java,Eclipse,Search,Ide,Signature,有没有一种简单的方法可以在java项目中搜索,类中的哪些方法具有相同的“名称” 例如: public class Banana{ void findBananas(Ananas ananas) { --- } void findBananas(Bananas banana) { --- } void findCiao(Ciao ciao) { --- } void findCiao2(Ciao ciao) { --- } } 搜索必须指定在Banana类中重复方法名“findBana

有没有一种简单的方法可以在java项目中搜索,类中的哪些方法具有相同的“名称”

例如:

public class Banana{

void findBananas(Ananas ananas) { --- }

void findBananas(Bananas banana) { --- }

void findCiao(Ciao ciao) { --- }

void findCiao2(Ciao ciao) { --- }

}
搜索必须指定在Banana类中重复方法名“findBananas”


欢迎使用任何工具/ide。

更新帖子。已删除旧版本

你可以使用反射。我不知道您的具体需求,但这一款适合我的项目,如下所示:

为此,您需要使用'org.reflections:reflections:0.9.10'库。你可以从这里下载

公共静态类MethodInfo{
从类到类;
ArrayList方法=新的ArrayList();
公共方法信息(类fromClass){
this.fromClass=fromClass;
}
}
公共静态哈希映射
findOverloadedMethods(字符串包OSCAN,布尔declaredClass){
设置>findAllClassesInPackage(字符串packageToScan){
反射=新反射(
新建子扫描程序(false),新建资源扫描程序(),
新建FilterBuilder().include(FilterBuilder.prefix(packageToScan));
返回reflections.getsubscriptsof(Object.class);
}
公共静态无效打印(哈希映射){
for(字符串键:map.keySet()){
RScanner.MethodInfo=map.get(键);
if(info.methods.size()>1){
//wait方法在对象类中有3个重载
如果(!info.methods.get(0.getName().equals)(“wait”))
System.out.println(key+“:”+info.methods.size());
}
}
}

如何在同一类中搜索具有相同名称的方法。这些方法称为重载方法。您要寻找的是一种查找
重载
方法的方法。您解释这一方法的方式是一种过度使用。也就是说,您希望进行文本搜索还是希望在运行时通过反射来查找它们?啊哈,没错:)谢谢!我想列出“副本”Java项目中所有类中的方法。这与您的初始要求不同。您希望在所有类中查找重复项,还是在每个类中查找所有类中的重复项。此外,您是否尝试过任何操作?如果没有,此问题可能是编码请求的候选项,可能会被关闭。好的,我删除了我的答案,b但是你肯定可以用反射来完成所有这些。找到你程序中的每个类,循环重复的方法。这个程序只是打印方法名,没有找到重载的方法。如果你想让你的程序做所有的对话,你至少可以让它做OP想做的:)是的,但是你可以在上面建立一个逻辑是的。但它并没有回答这个问题。它更多的是一个提示。在《成瘾》一书中,我想列出Java项目中所有类中的“重复”方法(数百个,因此我不能像您那样列出它们=@Gaetano如果您仍在寻找某种解决方案,请参阅更新的帖子。
public static class MethodInfo {
    Class fromClass;
    ArrayList<Method> methods = new ArrayList<Method>();

    public MethodInfo(Class fromClass) {
        this.fromClass = fromClass;
    }
}

public static HashMap<String, MethodInfo>
        findOverloadedMethods(String packageToScan, boolean declaredInClass){

    Set<Class<?>> allClasses = findAllClassesInPackage(packageToScan);
    System.out.println("Number of Classes in "+ packageToScan 
                       +" = " + allClasses.size());

    HashMap<String, MethodInfo> map = new HashMap<String, MethodInfo>();

    for (Class c : allClasses) {
        try {
            findAllMethodsForClass(c, declaredInClass, map);
        }catch (java.lang.NoClassDefFoundError e){
            //have no idea why some classes throw this NoClassDefFoundError
            System.err.println(c.getName() + ": java.lang.NoClassDefFoundError");
        }
    }

    return map;
}
public static void findAllMethodsForClass(Class c, boolean declaredInClass, 
                                          HashMap<String, MethodInfo> map)
        throws java.lang.NoClassDefFoundError{
    //Set<Method> methods = ReflectionUtils.getAllMethods(c);
    Method[] methods = declaredInClass ? c.getDeclaredMethods(): c.getMethods();

    for (Method method : methods) {
        String key = c.getName() + "." + method.getName();

        if (!map.containsKey(key)) {
            map.put(key, new MethodInfo(c));
        }

        MethodInfo methodInfo = map.get(key);
        methodInfo.methods.add(method);
    }
}
public static Set<Class<?>> findAllClassesInPackage(String packageToScan){
    Reflections reflections = new Reflections(
            new SubTypesScanner(false), new ResourcesScanner(),
            new FilterBuilder().include(FilterBuilder.prefix(packageToScan)));

    return reflections.getSubTypesOf(Object.class);
}

public static void print(HashMap<String, RScanner.MethodInfo> map){
    for (String key : map.keySet()) {
        RScanner.MethodInfo info = map.get(key);
        if (info.methods.size() > 1) {
            // wait method has 3 overloads in Object class
            if (!info.methods.get(0).getName().equals("wait"))
                System.out.println(key + " : " + info.methods.size());
        }
    }
}