爲什麼在Java 8 lambda表達式中使用?:
運算符時拋出異常?
當我嘗試運行以下示例代碼:在Java 8 lambda表達式中使用?:運算符時出現異常
import java.util.ArrayList;
import java.util.List;
public class TestClass
{
public static void main(String[] args)
{
List<Foo> foos = new ArrayList<>();
boolean b = true;
foos.forEach(foo -> (b ? foo.doSth(1) : foo.doSth(2)));
}
@FunctionalInterface
interface Foo
{
public void doSth(int i);
}
}
我出現以下情況例外:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
at gui.marksDetection.view.TestClass.main(TestClass.java:8)
當與替換lambda表達式一個的for-each環,或具有取代(b ? foo.doSth(1) : foo.doSth(2))
if-else-block,一切正常,所以組合?: + lambda
似乎有問題。但是,Eclipse不會將其標記爲錯誤。
您的代碼無法編譯,但Java可以讓您無論如何運行它並查看。當涉及到編譯問題時,它會拋出異常。你的問題是語法錯誤;你有一個太多的括號。 – Nateowami 2014-09-22 09:46:17
「foo - >」foos.forEach是什麼(foo - >(b?foo.doSth(1):foo.doSth(2)));.你能描述一下它的含義嗎? – Ajit 2014-09-22 09:47:08
@Nateowami:你的意思是使用「b?foo.doSth(1):foo.doSth(2)」而不是使用「(b?foo.doSth(1):foo.doSth(2))」 - >這個拋出相同的異常。 – Sebi 2014-09-22 09:54:00