发送命令到功能

时间:2018-09-19 11:27:03

标签: 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-Java 谢谢

1 个答案:

答案 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!");
    }
});