Java 向函数发送命令
例如,如何向函数发送命令Java 向函数发送命令,java,android,function,Java,Android,Function,例如,如何向函数发送命令 { { boolean b; Do(b, b = false); } public void Do (boolean b,Command command) { if (b == true) { command; } } } 因此,如果b=true,在本例中应将其变为false。 有什么想法吗? 我正在使用android studio-j
{
{
boolean b;
Do(b, b = false);
}
public void Do (boolean b,Command command)
{
if (b == true)
{
command;
}
}
}
因此,如果b=true,在本例中应将其变为false。
有什么想法吗?
我正在使用android studio-java
谢谢首先,定义命令的结构。您需要定义“command”要接受的每个参数的确切类型,调用“command”返回的内容(哪种类型),以及允许抛出的检查异常(如果有) 一旦你决定了,要么找到一个合适的现有功能接口,要么自己做一个 什么是功能接口?只是一个接口,其中正好有1个(非默认)方法。例如,有如下定义的
java.lang.Runnable
:
public interface Runnable {
void run();
}
这意味着:此命令不接受任何参数,不返回任何内容,并且不能抛出任何已检查的异常
一旦你完成了所有这些,你就可以很容易地创建它们了。这就像一个对象,因此您可以对结果调用.run()
:
public void test() {
Runnable r = () -> System.out.println("Hello!");
doTwice(r);
// you can one-liner it too of course:
doTwice(() -> System.out.println("World!"));
}
public void doTwice(Runnable r) {
r.run();
r.run();
}
上面会打印“你好!”两次,然后是“世界!”两次
但是在伪代码中,您试图更改“发送”给另一个方法的代码中的局部变量值。这在java中是不允许的;在其中一个代码块中使用的任何局部变量都需要是有效的final,这意味着:它们只初始化一次,并且不再更改
摆脱困境的一种方法是将它变成一个AtomicBoolean
,它是一个可变对象。然后你会得到这样的结果:
AtomicBoolean b = new AtomicBoolean(false);
runTwice(()-> b.set(true));
System.out.println(b); // Prints true
你问过安卓;上述特性是在Java8中引入的。虽然Java8现在已经快5年了,但android或多或少是java的一个分支,它在Java8推出之前就已经存在了。我不知道android是否支持这些结构。谷歌或四处询问android是否支持“lambdas”(上面的东西就是这么做的)
如果android不支持lambdas,这仍然是可能的,但真的,真的很难看:
runTwice(new Runnable() {
public void run() {
System.out.println("Hello!");
}
});
第二个参数需要是
命令的一个实例,因此您的Do(b,b=false)代码>不编译。不知道您使用的是哪个命令
,但它需要一种方法,如执行
,调用
等,您需要使用这些方法来执行该命令。多亏它很有效,我不知道您是否发布了第一个答案,然后删除了它,但它第一次起作用,是的,它确实支持lambdas,它要求我将语言更改为8级-lambdas(我想是这样的),一旦我这样做了,它就起作用了。重要提示:您应该在build.gradle(模块应用程序)中添加android{compileOptions{sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}