`

通过制定方法名 和方法参数 从类中查找方法

    博客分类:
  • java
 
阅读更多

    protected Method findMatchingMethod() {
        String targetMethod = getTargetMethod();
        Object[] arguments = getArguments();
        int argCount = arguments.length;

        Method[] candidates = ReflectionUtils.getAllDeclaredMethods(getTargetClass());
        int minTypeDiffWeight = Integer.MAX_VALUE;
        Method matchingMethod = null;

        for (Method candidate : candidates) {
            if (candidate.getName().equals(targetMethod)) {
                Class[] paramTypes = candidate.getParameterTypes();
                if (paramTypes.length == argCount) {
                    int typeDiffWeight = getTypeDifferenceWeight(paramTypes, arguments);
                    if (typeDiffWeight < minTypeDiffWeight) {
                        minTypeDiffWeight = typeDiffWeight;
                        matchingMethod = candidate;
                    }
                }
            }
        }

        return matchingMethod;
    }

 

 

    public static int getTypeDifferenceWeight(Class[] paramTypes, Object[] args) {
        int result = 0;
        for (int i = 0; i < paramTypes.length; i++) {
            if (!ClassUtils.isAssignableValue(paramTypes[i], args[i])) {
                return Integer.MAX_VALUE;
            }
            if (args[i] != null) {
                Class paramType = paramTypes[i];
                Class superClass = args[i].getClass().getSuperclass();
                while (superClass != null) {
                    if (paramType.equals(superClass)) {
                        result = result + 2;
                        superClass = null;
                    }
                    else if (ClassUtils.isAssignable(paramType, superClass)) {
                        result = result + 2;
                        superClass = superClass.getSuperclass();
                    }
                    else {
                        superClass = null;
                    }
                }
                if (paramType.isInterface()) {
                    result = result + 1;
                }
            }
        }
        return result;
    }

分享到:
评论

相关推荐

    c#emgucv图像滤波处理及矩形查找

    在Emgu CV中,这些滤波器可以通过`Image`类提供的方法来调用,例如`MedianBlur`、`AverageBlur`、`GaussianBlur`、`BilateralFilter`、`BoxFilter`等。使用时需要指定滤波器的大小和参数,以达到预期效果。 接下来...

    电气故障查找检修的方法介绍.pptx

    电气故障的查找与检修是电气工程领域中一项重要的技术任务,涉及到设备的正常运行和生产安全。本资料详细介绍了电气故障检修的一般步骤和实用技巧,旨在帮助技术人员更有效地定位和解决问题。 首先,查找电气故障的...

    数据统计分析方法和应用(66页).ppt

    数据统计分析方法和应用涵盖了一系列的数据处理技术和分析模型,旨在从庞大的数据集中提炼出有用信息,支持策略制定和业务运营。 一、数据统计的重要性 数据统计是现代企业在决策中不可或缺的一环。美国杜邦公司总...

    19种农药国际标准分析方法简介.pdf

    国际农药分析协作委员会(CI PAC)制定的方法被认为是全球农药分析的标准,被联合国粮农组织和世界卫生组织广泛采纳。CI PAC的手册K卷涵盖了2000年至2002年间19种农药的有效成分及其50多种原药和制剂的分析方法,...

    行业分类-设备装置-一种基于共享数据平台的数据处理方法.zip

    描述中的".zip"表明这是一个压缩文件,其中包含了详细资料——"一种基于共享数据平台的数据处理方法.pdf",这份文档很可能是详细的技术指南或者研究报告,阐述了具体的实施步骤和策略。 共享数据平台是现代企业数据...

    基于布谷鸟搜索优化BP神经网络的网络安全态势评估方法.pdf

    在网络安全态势评估方法中,布谷鸟搜索算法被用来优化BP神经网络,具体步骤包括:首先根据态势输入指标和输出态势值确定BP神经网络的输入输出节点数,然后计算出隐含层节点数,接着随机初始化网络参数,利用布谷鸟...

    ENVI气溶胶反演扩展工具及查找表.zip

    气溶胶反演是遥感领域中的一个重要环节,它涉及到对大气中悬浮微粒——气溶胶的浓度、类型和光学特性等参数的估算。ENVI(Environment for Visualizing Images)是一个广泛使用的遥感图像处理软件,而IDL...

    php在数组中查找指定值的方法

    此外,根据`$strict`参数的不同设置,你可以更加精确地控制查找过程中的类型匹配要求,从而避免潜在的类型混淆问题。 最后,值得注意的是,`array_search`和`in_array`函数在性能上的差异主要取决于数组的大小和...

    计算机二级公共基础知识

    例如,在一维数组[21,46,24,99,57,77,86]中,查找数据元素99,首先从第1个元素21开始进行比较,比较结果与要查找的数据不相等,接着与第2个元素46进行比较,以此类推,当进行到与第4个元素比较时,它们相等,...

    基于PHP开发的一个通用隐式MVC路由.zip

    在"route-master"这个项目中,我们可以假设它包含了一个路由引擎,该引擎能解析URL并自动映射到对应的控制器类和方法。通常,路由引擎会分析URL路径,提取出控制器名、方法名以及可能的参数。例如,URL "site....

    黑马程序员入学Java知识

    - 类通过实现接口来提供接口所定义的行为。 - 接口间可以通过extends关键字进行扩展。 13. **面向接口编程之制定标准和简单工厂模式** - 面向接口编程强调编程时依赖于抽象而不是具体实现。 - 简单工厂模式提供...

    ISO 11452-9-2021中文 道路车辆窄带辐射电磁能电干扰的部件试验方法第9部分:便携式发射机.rar

    《道路车辆窄带辐射电磁能电干扰的部件试验方法第9部分:便携式发射机》是ISO 11452系列标准中的一个重要组成部分,该标准主要关注于汽车电子设备在遭受电磁干扰时的性能评估。这个标准的2021年版本,即ISO 11452-9-...

    企业物资采购信息收集方法.docx

    1. 现有市场信息:通过市场调研了解当前物资的价格、供应情况、市场趋势等,帮助企业制定采购策略。 2. 同行信息:通过与其他同行业企业交流,获取物资的采购经验、供应商评价等,有助于识别优质供应商。 3. 供货商...

    java基础知识笔记总结

    - 继承是指一个类可以继承另一个类的属性和方法,实现代码的复用。 11. **子类访问父类和方法覆写** - 子类可以通过super关键字访问父类的成员。 - 方法覆写是指子类重新定义父类的方法。 12. **super关键字和...

    接触网跳闸原因分析查找.doc

    综上所述,《接触网跳闸原因分析查找》文档为电力系统的维护人员提供了全面的故障诊断与分析方法,涉及了故障性质的判断、天气和温度影响、不同跳闸情况的分析以及特殊情况下参数的识别等多个方面。通过应用这些专业...

    湖南文理学院:电子设计方法及报告的写作

    关键词的书写原则强调相关性、专指性和检索性,即所选关键词应与报告内容紧密相关,能够准确反映报告的专业领域,便于在文献检索中被查找到。 湖南文理学院提供的电子设计方法及报告写作知识点,旨在指导学生如何...

    第章CAPP的基本原理与方法.ppt

    - 在确定了加工方法后,工艺人员会查找合适的机床设备、选择适当的切削工具和刀具参数,同时计算工装和工时定额。 2. **CAPP系统的构建**: - 将零件特征信息数字化并输入计算机,建立零件信息数据库,便于计算机...

    本地磁盘E的文件使用查找到的

    这通常指的是通过某种方法或工具来检查磁盘中文件的使用情况,例如文件的访问频率、读写次数、占用空间大小以及文件类型分布等信息。这种检查对于优化存储空间、改善文件管理、提升系统性能以及维护数据安全都具有...

    java精华总结

    方法中的属性指的是方法参数和方法体内的局部变量。 ##### 4. 方法特点 - 可以重用代码。 - 提高程序的可维护性和可读性。 ##### 5. 方法的重载(Overload) 在同一类中,允许存在一个以上的同名方法,只要它们...

Global site tag (gtag.js) - Google Analytics