Java,宏代码,函数地址

时间:2011-03-01 16:19:16

标签: java function macros

我是Java的初学者,我想写一些这样的代码:

TEST(myfunction(1, 2, 3));

TEST 是:

  • C
  • 中使用的宏
  • 需要函数地址 myfunction
  • 的函数

在我的代码中,我希望 TEST 来做一些代码:

TEST(function) {
    if (function()) 
        // code
    else
        //code
}

我知道指针在Java中不可用。 一个想法来帮助我?

[编辑] 这是另一个例子:

TEST(myfunction(1, 2, 3));

实施TEST的地方:

void TEST (function(args[])) {
try {
    function();
}
catch (Exception e) {
    // Exception happened !
}

}

多亏了这一点,只需一个代码行,我就可以使用 try catch

3 个答案:

答案 0 :(得分:5)

Java没有指向函数的指针。函数在Java中传递的典型方式是传递实现Runnable的对象。

编辑:我已将我的示例修改为更接近您的第二个案例。

在您需要布尔返回值的情况下,您可以定义自己的接口:

public interface BooleanTest {
    boolean test(Object... args) throws Exception;
}

然后再说:

class MyTest implements BooleanTest {
    private boolean result;
    public MyTest(int a, int b, int c) {
        result = a + b == c;
    }
    // stupid test -- don't _have_ to declare "throws Exception"
    public boolean test(Object... args) {
        return result && args.length == 3;
    }
}

TEST(new MyTest(1, 2, 3));

并在TEST内:

TEST(BooleanTest test) {
    try {
        if (test.test("Jack", "and", "Jill")) {
            // ...
        }
    } catch (Exception e) {
    }
}

答案 1 :(得分:0)

您需要将接口实现作为参数。像这样:

public static void testFunction(new FunctionContainer() {

  @Override
  public int function() {
    ...
  }

};);

答案 2 :(得分:0)

你不能在java中真正做到这一点,因为方法不是对象。要实现所需的功能,您需要将函数/方法包装在另一个对象中。

 // Define a function interface that your test method takes as an argument.
 public interface Function {
     public abstract void doFunction();
 }

 // Test code
 public void test(Function function) {
     function.doFunction();
 }

 // You can then pass an implementation of Function to your test method
 test(new Function() {
     public void doFunction() {
         // Function implementation
     }
  });