当前位置: 首页 > 面试题库 >

如何在Java运行时检查方法是否存在?

邓正谊
2023-03-14
问题内容

如何检查Java中是否存在类的方法?将一个try {...} catch {...}声明是好的做法呢?


问题答案:

我假设您要检查该方法doSomething(String, Object)

您可以尝试以下方法:

boolean methodExists = false;
try {
  obj.doSomething("", null);
  methodExists = true;
} catch (NoSuchMethodError e) {
  // ignore
}

这将不起作用,因为该方法将在编译时解决。

您确实需要使用反射。而且,如果您可以访问要调用的方法的源代码,则最好使用要调用的方法创建一个接口。

[更新]附加信息是:有一个接口可能存在两个版本,一个是旧版本(不包含所需方法),一个是新版本(具有所需方法)。基于此,我提出以下建议:

package so7058621;

import java.lang.reflect.Method;

public class NetherHelper {

  private static final Method getAllowedNether;
  static {
    Method m = null;
    try {
      m = World.class.getMethod("getAllowedNether");
    } catch (Exception e) {
      // doesn't matter
    }
    getAllowedNether = m;
  }

  /* Call this method instead from your code. */
  public static boolean getAllowedNether(World world) {
    if (getAllowedNether != null) {
      try {
        return ((Boolean) getAllowedNether.invoke(world)).booleanValue();
      } catch (Exception e) {
        // doesn't matter
      }
    }
    return false;
  }

  interface World {
    //boolean getAllowedNether();
  }

  public static void main(String[] args) {
    System.out.println(getAllowedNether(new World() {
      public boolean getAllowedNether() {
        return true;
      }
    }));
  }
}

此代码测试getAllowedNether接口中是否存在该方法,因此实际对象是否具有该方法都没有关系。

如果getAllowedNether必须经常调用该方法,并且因此而导致性能问题,我将不得不考虑一个更高级的答案。此刻现在应该没问题。



 类似资料:
  • 问题内容: 我在我的项目中使用JobService。运行良好。但有时服务停止了。它不会再次重新启动。因此,如果没有运行,我将尝试分层JobService。但是我不知道如何检查JobService是否已经运行。请让我知道如何检查JobService是否正在运行。 我的工作服务课程: 我的实用程序类: 开始: 停止: 问题答案: 我找到了解决方案。 使用此方法,我们可以检查jobService是否正在

  • 问题内容: 我正在尝试创建一个bash实用程序脚本以检查我的服务器中是否正在运行docker守护进程。除了运行这样的代码之外,还有没有更好的方法来检查docker守护进程是否正在我的服务器中运行? 我想创建一个bash shell脚本,该脚本将检查我的docker守护程序是否正在运行。如果它正在运行,则什么也不做,如果没有,则启动docker守护程序。 我的伪代码是这样的。我正在考虑解析ps -e

  • 问题内容: 我具有以下数据库结构: 在我的项目永久链接页面上,我有一个“添加到收藏夹”按钮,可在其中插入新行 如果用户已经在收藏夹中将其替换为“从收藏夹中删除”按钮,我希望能够将其替换。 我无法弄清楚其背后的逻辑-是否需要检查其中是否存在具有当前用户ID和永久链接ID的行?这对我不起作用: 问题答案: 您可能想要这样的东西:

  • 问题内容: 在打开文件以Java读取之前,如何检查文件是否存在?(相当于Perl的)。 关于SO的唯一类似问题涉及写入文件,因此使用回答了该问题,这显然不适用于此处。 如果可能的话,我宁愿使用真正的API调用返回,而不是使用“调用API来打开文件并在引发异常时捕获并在文本中检查’无文件’的情况下捕获”,但是我可以接受后者。 问题答案: 使用:

  • 问题内容: 如何检查存储过程或查询是否仍在SQL Server中运行? 主意 我曾经想过要在过程开始时在哪里写日志,并在过程结束时将日志删除。 缺陷: 使用过程监控器 我希望能有一个可以合并为一个存储过程的解决方案和/或,作为输入,所以使用SQL Server的界面将无法正常工作跟踪程序或解决方案。 更新#1 用法示例: 该过程应该像 并在运行时(20秒内)返回true,然后在函数失败或系统重新启

  • 问题内容: 在android app测试套件中,我有一个类似这样的类,其中一个视图是: 现在,我有一个视图对象列表,其中可能包含对象,但是在这种情况下,我只关心它们是子类还是“实例” 。我想做类似的事情: 问题在于,当遇到一个对象时,它不会评估为“实例”。有办法吗? 问题答案: 您必须仔细阅读此方法的API。有时,您很容易感到困惑。 可以是: API说:确定 指定的Object (参数) 是否与