我不明白為什么這段代碼有效:class Resource { private Resource() { System.out.println("created..."); } public Resource op1() { System.out.println("op1"); return this; } public Resource op2() { System.out.println("op2"); return this; } private void close() { System.out.println("clean up..."); } public static void use(Consumer<Resource> block) { Resource resource = new Resource(); try { block.accept(resource); } finally { resource.close(); } }}// method callpublic class App { public static void main( String[] args ) { Consumer<Resource> block = resource -> resource.op1().op2(); //here Resource.use(block); }}消費者應該接受一個參數(shù)并返回 void。但在此示例中,消費者采用一個參數(shù)(資源)并返回此參數(shù)。盡管我返回資源實例而不是 void,為什么它仍然有效?
1 回答

慕萊塢森
TA貢獻1810條經(jīng)驗 獲得超4個贊
你Consumer<Resource> block = resource -> resource.op1().op2();相當于:
Consumer<Resource> block = new Consumer<Resource>() {
@Override
public void accept(Resource resource) {
resource.op1().op2(); // there is no return statement
}
};
添加回答
舉報
0/150
提交
取消