【问题标题】:Fully qualified name of a class?类的完全限定名?
【发布时间】:2020-11-12 20:50:42
【问题描述】:
class MethodFinder {

    public static String findMethod(String methodName, String[] classNames) {
            for(String cn: classNames){
                if(cn.getMethods() == methodName){
                    return methodName.getName();
                }
            }
    }
}

实现一个方法,该方法将通过名称查找所提供方法的类。该方法接受两个参数,方法名和类名数组,其中:

methodName 是需要查找的方法的全称;

classNames 包含一个具有给定名称的方法的类。

它应该返回具有给定名称的方法的类的完全限定名称。

例如,方法名称是 abs,可能的类是 String、StringBuffer 和 Math。

String 和 StringBuffer 没有名为 abs 的方法。所以他们不是我们要找的班级。 Math 类有一个名为 abs 的方法。该方法应返回 Math 类的完全限定名称,在这种情况下为 java.lang.Math。

【问题讨论】:

  • 我不明白这个问题。你有一个类名数组,这些是完全合格的吗?不确定 cd.getMethods() 有什么作用。
  • 你能提供一个minimal reproducible example 正确的输入和预期的输出吗?此外,您显示的代码甚至无法编译。另外请向我们解释您在哪里以及遇到了什么问题
  • 对于反射,我们使用Class object getMethods()。我觉得第二个参数应该是Class[] classnames

标签: java class reflection


【解决方案1】:

如果您不能仅限于默认的 java 类(java.lang 包,它是隐式导入的)

public static String findMethod(String methodName, String[] classNames) {
    for(String cn: classNames){
        try {
            Class<?> clazz = Class.forName("java.lang." + cn);
            for (Method method : clazz.getMethods()) {
                if (method.getName().equals(methodName)) {
                    return clazz.getName();
                }
            }
        } catch(ClassNotFoundException ex) {
            // ignore
        }
    }
    return null;
}

否则您将不得不搜索类路径上的所有内容:Get all of the Classes in the Classpath

因为在.your.face.StringBuffer 中可能有一个带有方法abs() 的类

【讨论】:

  • "classNames 包含一个类,该类具有给定名称的方法。" ?? classNames 应该是完全限定的名称 - 没有包名称,不清楚在哪里查看
猜你喜欢
  • 2011-11-08
  • 1970-01-01
  • 2021-03-25
  • 2015-08-03
  • 2020-07-14
  • 2019-12-14
  • 2011-07-16
  • 2010-12-06
  • 1970-01-01
相关资源
最近更新 更多