Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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_Android_Function - Fatal编程技术网

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}