Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,宏代码,函数地址_Java_Function_Macros - Fatal编程技术网

Java,宏代码,函数地址

Java,宏代码,函数地址,java,function,macros,Java,Function,Macros,我是Java初学者,我想编写如下代码: TEST(myfunction(1, 2, 3)); 其中,测试为: 在C语言中使用的宏 需要函数myfunction地址的函数 在我的代码中,我想测试一些代码: TEST(function) { if (function()) // code else //code } 我知道指针在Java中不可用。 有什么主意可以帮我吗 [编辑] 下面是另一个例子: TEST(myfunction(1, 2,

我是Java初学者,我想编写如下代码:

TEST(myfunction(1, 2, 3));
其中,测试为:

  • 在C语言中使用的宏
  • 需要函数myfunction地址的函数
在我的代码中,我想测试一些代码:

TEST(function) {
    if (function()) 
        // code
    else
        //code
}
我知道指针在Java中不可用。 有什么主意可以帮我吗

[编辑] 下面是另一个例子:

TEST(myfunction(1, 2, 3));
在实施测试的地方:

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


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

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(BooleanTest test) {
    try {
        if (test.test("Jack", "and", "Jill")) {
            // ...
        }
    } catch (Exception e) {
    }
}

您需要获取一个接口实现作为参数。像这样:

public static void testFunction(new FunctionContainer() {

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

};);

在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
     }
  });

看起来它可以简单地用一个带有单个布尔参数的函数定义来代替。。。如:publicbooleantest(booleanb){…}…@perp不,我不能将boolean作为参数传递。我需要在测试中调用函数来执行它,并使用返回值
做一些处理,只有一行代码,我就可以使用try-catch了。请不要这样做。在Java中,你使用异常,如果你不想要它们,就不要使用Java。@Ishtar我从来没有说过我不想要使用异常!我只想一行写几行。我在C语言中用宏很容易做到这一点,我在Java中也尝试着这样做。实际上,当你遇到异常时,它是异常的,你不想继续下去,就好像什么都没发生一样(这似乎是假设的),如果你想让你的答案更清楚,你至少应该解释一下为什么OP的解决方案在Java中不起作用。@Ted Hopp抱歉,但新线程中的Runnable调用函数,这里我希望在当前线程中执行thread@TheFrancisOneRunnable可用于创建新的线程对象,但这不是它的唯一用途。Runnable本身不会创建新线程;它只是一个带有run()方法的对象,该方法声明自己是可运行的。在这种情况下,如果您想返回某个内容,
Callable
似乎是比
Runnable
@Ted Hopp更好的选择,谢谢,但在我的情况下还不够。这里,您的测试函数将对象作为参数
TEST(BooleanTest TEST)
,然后调用正确的方法。但在我的例子中,我不知道执行什么方法,我的
TEST
函数必须使用这个方法作为参数。接口不是我想要的。因为这里我想执行方法(或函数)并进行一些处理