当前位置: 首页 > 知识库问答 >
问题:

如何检查方法是否有重载

郑光济
2023-03-14

我正在和一个班合作。我正在使用一些方法。

我需要检查我需要传递的参数,来调用这个方法。我就是这样做的

 String params = "";
            int paramsCount = method.getParameterCount();
            if (paramsCount != 0) {
                params = "([" + paramsCount + "]";
                Class[] types = method.getParameterTypes();
                for (int i = 0; i < paramsCount; i++) {
                    params += " " + types[i].getName();
                    if (paramsCount - i != 1)
                        params += ",";
                }

                if (paramsCount != 0)
                    params += " )";
                else
                    params += ")";
            }

它工作得很好,但我知道有些方法有重载(没有参数),但这段代码只显示最后声明的方法(有参数要调用)。我怎样才能同时得到这两个重载?

这就是它的样子(我知道这个方法有重载)

例如另一个类:类扫描比打印方法方法

要扫描的代码

类的构造函数,它扫描给定的对象。

public ClassInformer(Object obj)
    {
        this.obj = obj;
        methods = obj.getClass().getDeclaredMethods();
        fields = obj.getClass().getDeclaredFields();

        getFields();
        getMethods(); // This code was posted above
    }

这就是我打印它们的方式。

str += "\n\nMethods(" + methodMap.size() + "):\n{\n";
        for (int i = 0; i < methodMap.keySet().size(); i++)
        {
            String method = "NullPointer : NullPointer";
            try
            {
                method = methodMap.keySet().toArray()[i].toString() + " : " + methodMap.get(methodMap.keySet().toArray()[i]).toString();
            }
            catch (NullPointerException ex) {}
            str += method + ",\n";
        }
        str += "\n}";

        return str;

共有1个答案

邰钟展
2023-03-14

在你发布的代码的第三行,你有一个if(paramsCount!=0){。你不处理另一种情况,其中paramsCount==0(可以使用@Matteo建议的else,或者简单地让结束循环的for条件完成它的工作),所以你不会列出没有参数的方法。

我还建议对参数之间的“”进行稍微不同的处理,以便更容易理解代码。出于性能考虑,您还应该使用StringBuilder,在编写代码时,每个参数将创建几个新的字符串对象,并丢弃旧的字符串对象。

StringBuider params = new StringBuilder();
int paramsCount = method.getParameterCount();
params.append("([").apppend(paramsCount).append(']');

Class[] types = method.getParameterTypes();
for (int i = 0; i < paramsCount; i++) {
  if (i != 0) {
    params.append(',');
  }
  params.append(' ').append(types[i].getName());
}
if (paramsCount != 0) {
  params.append(' ');
}
params.append(')');

不需要if来跳过for循环,如果paramscont为0,则i

要创建StringBuilder字符串,只需调用其。toString()方法。

 类似资料:
  • 问题内容: 在Go中,如何检查对象是否响应方法? 例如,在Objective-C中,可以通过执行以下操作来实现: 问题答案: 一个简单的选择是仅使用您要检查的方法声明一个接口,然后针对您的类型进行类型断言;例如: 如果您打算对自己的类型进行任何疯狂的操作,则可能要使用该软件包。http://golang.org/pkg/reflect

  • 我创建了一个事件。现在我想检查它们是否重叠。我在数据库中以日期格式存储了开始时间和结束时间。 现在我想检查事件的时间是否重叠。为此,我想获取所有事件start Time和endTime,从日期检索小时和分钟,然后将小时和分钟与当前小时和分钟进行比较。 日期格式如下:df=新的SimpleDateFormat(“E-MMM-dd-HH:mm:ss-zz-yyyy”); 我第一次尝试通过查询比较两个日

  • 我试图检查一个给定的二叉树是否是二叉查找树。我要做的是对二叉树进行有序遍历,并将当前元素与前一个元素进行比较。如果当前元素更大,我们继续进一步检查,否则给定的树是无效的。 这是我写的代码。我到底做错了什么?

  • 如何检查字典是否为空?更具体地说,我的程序从字典中的某个键开始,我有一个循环,循环迭代直到字典中有键为止。整体上algo是这样的: 从Dict中的某个键开始 当Dict中有键时 对Dict中的第一个键执行某些操作 删除第一个键 请注意,上面循环中的可能会向字典中添加新键。我尝试了中的值 但在while循环中添加了一些新键,因此它会失败。

  • 假设我有一个类和一个方法: 是否有一种方法可以编写一个在类路径上的任何类中调用该方法时都会失败的测试?我的意思是,不是在运行时调用方法时,而是在代码中声明方法时。 例如,该代码在类路径上的任何类中的precense都应该使测试失败: 我想要实现的目标:我想注释一些不应该在某个项目中调用的方法,但需要放在那里以便在另一个项目中使用,然后编写一个测试,确保注释的方法不会在任何地方被调用。

  • 我有一个角度服务公开了一个公共方法。在它的主体中,可以根据条件调用两个不同的私有方法 如何根据传递给公共方法的输入参数,与jasmine一起检查是否调用了一个或另一个方法?我知道我们不应该测试私有方法,但实际上在这里我只想验证公共方法是否调用了正确的私有方法。我不想公开私有方法,因为我只希望服务提供一个访问点。 我的服务方式: } 茉莉花试验: });