[问题] 有这种语法吗

楼主: 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