例如,我如何向功能发送命令。
{
{
boolean b;
Do(b, b = false);
}
public void Do (boolean b,Command command)
{
if (b == true)
{
command;
}
}
}
因此,如果b = true,则在此示例中应将其设置为false。 有任何想法吗 ? 我正在使用Android Studio-Java 谢谢
答案 0 :(得分:0)
首先,定义命令的结构。您需要定义“命令”要采用的每个参数的确切编号和类型,“命令”的调用返回什么(哪种类型)以及允许抛出的哪些检查异常(如果有)。
一旦决定,要么找到合适的现有功能接口,要么自己创建一个。
什么是功能接口?只是一个接口,其中恰好具有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();
}
上面将显示“ Hello!”两次,然后是“世界!”两次。
然而,在您的伪代码中,您试图将“发送”到另一种方法的代码中的局部变量的值更改。这在Java中是不允许的。这些代码块之一中使用的任何局部变量都必须有效地最终确定,这意味着:它们仅被初始化一次,而不会再次更改。
摆脱困境的一种方法是使AtomicBoolean
是可变对象。然后您会得到类似的东西:
AtomicBoolean b = new AtomicBoolean(false);
runTwice(()-> b.set(true));
System.out.println(b); // Prints true
您已经问过有关android的问题;上面的功能是在Java 8中引入的。虽然Java 8到现在已有5年历史了,但android还是Java的一个分支,它是在引入Java 8之前分叉的。我不知道android是否支持这些构造。谷歌或询问安卓系统是否支持“ lambdas”(上述功能)。
如果android 不不支持lambda,则仍然有可能,但确实非常丑陋:
runTwice(new Runnable() {
public void run() {
System.out.println("Hello!");
}
});