作者qazsd (知足常樂)
看板java
標題[問題] 有這種語法嗎
時間Wed Dec 23 13:35:30 2015
想請問一下,以下這段是使用JD-GUI解譯出來的其中一段程式碼,
private List<ContentEntityObject> findBlogPosts(SearchResults searchResults) {
Lists.newArrayList(Collections2.transform(
his.searchManager.convertToEntities(searchResults,
SearchManager.EntityVersionPolicy.LATEST_VERSION), new Function() {
public ContentEntityObject apply(Searchable searchable) {
return (ContentEntityObject) searchable;
}
}));
}
但是放到Eclipse裡會有些部分有紅線如下:
findBlogPosts(SearchResults searchResults)
2 quick fixes available:
Add return statement => 變成 return Lists.newArrayList(Collections2...
Change return type to 'void'
new Function() {
1 quick fix available:
Add unimplemented methods => 變成增加如下片段:
@Override
public Object apply(Object input) {
return null;
}
不確定是不是解譯有錯,Java有method裡面還可以new Function() {....}這種語法嗎
這是Lambda?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.165.65
※ 文章網址: https://www.ptt.cc/bbs/java/M.1450848933.A.345.html
→ APE36: 你有換編譯的jdk嗎?? 12/23 14:48
→ ickxlin: 建立一個繼承自Function類別的匿名類別並且覆寫apply方法 12/23 16:55
→ ickxlin: 然後直接產生一個實例,當成參數傳入Coll2.transf()方法 12/23 16:56
→ ickxlin: 這不是lambda或closure喔! 12/23 16:58
→ ickxlin: eclipse警告的是apply()上要加個@Override,因為這有繼承 12/23 16:59
推 king08: 這好像Guva的語法 12/23 19:30
推 LPH66: 這個 apply 好像沒有覆寫到? 參數型態不同... 12/23 21:00
→ LPH66: 第一個紅線確實是少了個 return, 照它講的加 12/23 21:01
→ LPH66: 匿名類別這東西在 java 裡已經存在很長一段時間嘍~ 12/23 21:03
→ ssccg: 應該是因為原本source用lambda寫的,decompile後變成那些 12/24 11:16
→ ssccg: functional的class,所以才有少東西吧 12/24 11:16
→ ssccg: Function那個是錯在少掉generic,可以compile的寫法是 12/24 11:16
→ ssccg: new Function<Searchable, ContentEntityObject>() { ... 12/24 11:18
→ ssccg: @Override不是必要的,那段錯誤訊息是指new Function() 12/24 11:22
→ ssccg: =new Function<Object,Object>()沒有實作該有的apply 12/24 11:22
推 LPH66: 啊, 樓上比較有道理 12/25 00:21
→ LPH66: generic 在編譯成 bytecode 時就不見了沒錯 12/25 00:21