看板 java 關於我們 聯絡資訊
想請問一下,以下這段是使用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