[問題] java 觀念請益

作者: SongIceFire (冰與火之歌)   2021-02-05 07:21:09
主要是來自於這個問題以及 github
https://stackoverflow.com/questions/32209248/java-util-stream-with-resultset
https://github.com/claudemartin/streamed-sql
在 Example.java 中
...
strsql.stream("SELECT * FROM FOO WHERE NAME LIKE 'L%' ORDER BY NAME", Foo::o
f))
...
這個
Foo::of 是建構式參考
但在 StreamedSQL.java 中 strsql.stream() 這個方法簽署傳入的是介面
public <T> Stream<T> stream(final String query, final ResultSetMapper<T> map
per) throws SQLException {
return stream(this.getDefConn(), query, mapper);
}
只知道靜態方法簽署中參數與回傳值相同所以可使用建構式參考
但不清楚為何傳入的是 ResultSetMapper 介面
以及從何得知T的實際型態為 Foo
另外 Foo::of 可以改用 lambda 寫嗎
謝謝
作者: ssccg (23)   2021-02-05 09:30:00
不是得知T型態為Foo,是因為用了Foo::of所以T才確定是Foo方法或建構式參考就是參數和回傳值跟函式介面的方法一樣就能拿來當介面實作,Foo::of 是 (ResultSet) -> FooResultSetMapper<T>的map是 (ResultSet) -> T所以Foo::of可以實作ResultSetMapper<Foo>
作者: SongIceFire (冰與火之歌)   2021-02-06 04:24:00
先謝謝,我先再翻一下書看看這部分

Links booklink

Contact Us: admin [ a t ] ucptt.com