Java,宏代码,函数地址
我是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,
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
函数必须使用这个方法作为参数。接口不是我想要的。因为这里我想执行方法(或函数)并进行一些处理