今まで私は必要なすべての回答を見つけることができますが、この1つは私を混乱させます。Javaでラムダの戻り値
public class Animal {
private String species;
private boolean canHop;
private boolean canSwim;
public Animal(String speciesName, boolean hopper, boolean swimmer) {
species = speciesName;
canHop = hopper;
canSwim = swimmer;
}
public boolean canHop() { return canHop; }
public boolean canSwim() { return canSwim; }
public String toString() { return species; }
}
public interface CheckAnimal {
public boolean test(Animal a);
}
public class FindSameAnimals {
private static void print(Animal animal, CheckAnimal trait) {
if(trait.test(animal)){
System.out.println(animal);
}
public static void main(String[] args) {
print(new Animal("fish", false, true), a -> a.canHop());
}
}
OCA研究ガイド(試験1Z0-808)この本は、これら2本の線が同等であることを述べている:
a -> a.canHop()
(Animal a) -> { return a.canHop(); }
が、これは舞台裏で、Javaが追加されます、という意味ではないのは、私たちはサンプルコードを持っているとしましょうキーワード返信最初の場合は?
答えがYESであれば、どのようにコードのコンパイル(他のすべてが適切な場所にあると想像)次:
static int counter = 0;
ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(() -> counter++));
我々はための署名がを実行することを知っていて、Runnableの実行がある場合:
void execute(Runnable command)
void run()
答えがNOの場合、Javaが何かを返す必要がある時としないときをJavaがどのように知っているか?たぶん
a -> a.canHop()
場合には、メソッドのブール戻り値の型を無視したかったです。
run()がvoidを返すので、Runnableのケースでは戻り値の型を無視できることがわかります。 test()はvoidを返さないため、CheckAnimalの場合は戻り値の型を無視してはいけないことがわかります。 –
lambadaは、メソッドに返される型が含まれている場合、ラムダはそうでなければ提供しません。メソッドを書くためのショートカットですので、自分自身を混同しないでください。 – emotionlessbananas