[問題] java 觀念請益

看板java作者 (冰與火之歌)時間1年前 (), 1年前編輯推噓0(006)
留言6則, 2人參與, 1年前最新討論串1/1
主要是來自於這個問題以及 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 寫嗎 謝謝 ---- Sent from BePTT -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.97.104 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/java/M.1612480872.A.ECB.html

02/05 09:30, 1年前 , 1F
不是得知T型態為Foo,是因為用了Foo::of所以T才確定是Foo
02/05 09:30, 1F

02/05 09:34, 1年前 , 2F
方法或建構式參考就是參數和回傳值跟函式介面的方法一樣就
02/05 09:34, 2F

02/05 09:37, 1年前 , 3F
能拿來當介面實作,Foo::of 是 (ResultSet) -> Foo
02/05 09:37, 3F

02/05 09:37, 1年前 , 4F
ResultSetMapper<T>的map是 (ResultSet) -> T
02/05 09:37, 4F

02/05 09:38, 1年前 , 5F
所以Foo::of可以實作ResultSetMapper<Foo>
02/05 09:38, 5F

02/06 04:24, 1年前 , 6F
先謝謝,我先再翻一下書看看這部分
02/06 04:24, 6F
不要用 lambda 寫反而很清楚 謝謝 .... try (final var conn = initDB()) { final var strsql = StreamedSQL.create(conn, true); try (Stream<Foo> stream = strsql.stream("select ... ", new ResultSetMapper<Foo>(){ @Override public Foo map(ResultSet rs) throws SQLException{ return Foo.of(rs); } })) { stream.filter(....); } } .... ※ 編輯: SongIceFire (223.136.97.104 臺灣), 02/06/2021 13:00:10
文章代碼(AID): #1W785exB (java)
文章代碼(AID): #1W785exB (java)