【问题标题】:Is it possible to postpone function call binds to runtime in Java?是否可以将函数调用绑定到 Java 中的运行时?
【发布时间】:2012-10-01 17:06:28
【问题描述】:

考虑一个简单的例子,我要求用户从 10 种不同的水果中选择一种水果。假设水果是,苹果、橙子、芒果……等等,如果用户选择苹果,我调用apples(),如果他选择芒果,我调用mangoes()等等……

要选择调用哪个函数,我不想使用 switch 或 if-else 语句。如何选择在运行时调用哪个函数?

注意:我使用的编程语言是 Java

【问题讨论】:

  • 你想在这些方法/功能中实现什么?
  • 创建一个接口水果然后每个类都应该继承它,然后使用反射API来实例化...尝试在Java中寻找动态绑定以更好地理解它。
  • 我只想知道如何动态调用这些方法。现在,为了简单起见,我们可以假设我在这些方法中打印了水果的名称。
  • 你需要反射,但它有优点/缺点

标签: java runtime function-calls


【解决方案1】:

使用javaRefection api在运行时调用函数。

        Class noparams[] = {};
        Class cls = Class.forName("com.test.Fruit");
        Object obj = cls.newInstance();

        //call the printIt method
        Method method = cls.getDeclaredMethod("apples", noparams);
        method.invoke(obj, null);

【讨论】:

    【解决方案2】:

    使用Reflection。 例如: 编写一个类中的所有函数;说com.sample.FruitStall 然后使用下面的代码。

    String className = "com.sample.FruitStall";
    String methodName = "apple"; //here you will choose desired method
    Object result;
    Class<?> _class;
            try {
                _class = Class.forName(className);
            } catch (Exception e) {
                e.printStackTrace();
            }
                Object[] args = new Object[1];  // To Supply arguments to function
                result = _class.invokeMethod(methodName, args);
    

    【讨论】:

      【解决方案3】:

      使用设计模式“命令”。 http://www.codeproject.com/Articles/186192/Command-Design-Pattern

      隐藏它需要执行的操作的细节。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        • 2013-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多