[問題] 有這種語法嗎

看板java作者 (知足常樂)時間9年前 (2015/12/23 13:35), 編輯推噓3(3014)
留言17則, 5人參與, 最新討論串1/1
想請問一下,以下這段是使用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

12/23 14:48, , 1F
你有換編譯的jdk嗎??
12/23 14:48, 1F

12/23 16:55, , 2F
建立一個繼承自Function類別的匿名類別並且覆寫apply方法
12/23 16:55, 2F

12/23 16:56, , 3F
然後直接產生一個實例,當成參數傳入Coll2.transf()方法
12/23 16:56, 3F

12/23 16:58, , 4F
這不是lambda或closure喔!
12/23 16:58, 4F

12/23 16:59, , 5F
eclipse警告的是apply()上要加個@Override,因為這有繼承
12/23 16:59, 5F

12/23 19:30, , 6F
這好像Guva的語法
12/23 19:30, 6F

12/23 21:00, , 7F
這個 apply 好像沒有覆寫到? 參數型態不同...
12/23 21:00, 7F

12/23 21:01, , 8F
第一個紅線確實是少了個 return, 照它講的加
12/23 21:01, 8F

12/23 21:03, , 9F
匿名類別這東西在 java 裡已經存在很長一段時間嘍~
12/23 21:03, 9F

12/24 11:16, , 10F
應該是因為原本source用lambda寫的,decompile後變成那些
12/24 11:16, 10F

12/24 11:16, , 11F
functional的class,所以才有少東西吧
12/24 11:16, 11F

12/24 11:16, , 12F
Function那個是錯在少掉generic,可以compile的寫法是
12/24 11:16, 12F

12/24 11:18, , 13F
new Function<Searchable, ContentEntityObject>() { ...
12/24 11:18, 13F

12/24 11:22, , 14F
@Override不是必要的,那段錯誤訊息是指new Function()
12/24 11:22, 14F

12/24 11:22, , 15F
=new Function<Object,Object>()沒有實作該有的apply
12/24 11:22, 15F

12/25 00:21, , 16F
啊, 樓上比較有道理
12/25 00:21, 16F

12/25 00:21, , 17F
generic 在編譯成 bytecode 時就不見了沒錯
12/25 00:21, 17F
文章代碼(AID): #1MUZAbD5 (java)
文章代碼(AID): #1MUZAbD5 (java)