効果的な理由最終変数はスイッチブロックではなく機能に対して機能しますか?Java 8:効果的な理由スイッチブロックで最終変数が機能しないのですか?
次の例は、コンパイルエラー
String comparing = " ";
String effectivelyFinal = "Hello ";
switch(comparing){
case effectivelyFinal :
System.out.println("Are equal");
break ;
default :
System.out.println("Are not equal");
}
Predicate<String> areEqual = s -> s.equals(effectivelyFinal);
スイッチは定数を比較するため、他の変数と比較することはできません。 – Walfrat
@Walfrat Java SE 8では、ローカルクラスは、最終的にまたは効果的に最終的な囲みブロックのローカル変数とパラメータにアクセスできます。値が初期化された後に決して変更されない変数またはパラメータは事実上最終的です。なぜスイッチは効果的に変数を見ることができないのですか? – Aguid
コンパイル時に知っておく必要があります...そして、単純な 'if-else'ではなく' switch-case'をここで使用している理由を理解できません。 – AKSW