[問題] 有這種語法嗎

作者: qazsd ( )   2015-12-23 13:35:30
想請問一下,以下這段是使用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?
作者: APE36 (PT鄉民)   2015-12-23 14:48:00
你有換編譯的jdk嗎??
作者: ickxlin (ickxlin)   2015-12-23 16:55:00
建立一個繼承自Function類別的匿名類別並且覆寫apply方法然後直接產生一個實例,當成參數傳入Coll2.transf()方法這不是lambda或closure喔!eclipse警告的是apply()上要加個@Override,因為這有繼承
作者: king08   2015-12-23 19:30:00
這好像Guva的語法
作者: LPH66 (-6.2598534e+18f)   2015-12-23 21:00:00
這個 apply 好像沒有覆寫到? 參數型態不同...第一個紅線確實是少了個 return, 照它講的加匿名類別這東西在 java 裡已經存在很長一段時間嘍~
作者: ssccg (23)   2015-12-24 11:16:00
應該是因為原本source用lambda寫的,decompile後變成那些functional的class,所以才有少東西吧Function那個是錯在少掉generic,可以compile的寫法是new Function<Searchable, ContentEntityObject>() { ...@Override不是必要的,那段錯誤訊息是指new Function()=new Function<Object,Object>()沒有實作該有的apply
作者: LPH66 (-6.2598534e+18f)   2015-12-25 00:21:00
啊, 樓上比較有道理generic 在編譯成 bytecode 時就不見了沒錯

Links booklink

Contact Us: admin [ a t ] ucptt.com