作者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://webptt.com/cn.aspx?n=bbs/java/M.1450848933.A.345.html
1F:→ APE36: 你有换编译的jdk吗?? 12/23 14:48
2F:→ ickxlin: 建立一个继承自Function类别的匿名类别并且覆写apply方法 12/23 16:55
3F:→ ickxlin: 然後直接产生一个实例,当成参数传入Coll2.transf()方法 12/23 16:56
4F:→ ickxlin: 这不是lambda或closure喔! 12/23 16:58
5F:→ ickxlin: eclipse警告的是apply()上要加个@Override,因为这有继承 12/23 16:59
6F:推 king08: 这好像Guva的语法 12/23 19:30
7F:推 LPH66: 这个 apply 好像没有覆写到? 参数型态不同... 12/23 21:00
8F:→ LPH66: 第一个红线确实是少了个 return, 照它讲的加 12/23 21:01
9F:→ LPH66: 匿名类别这东西在 java 里已经存在很长一段时间喽~ 12/23 21:03
10F:→ ssccg: 应该是因为原本source用lambda写的,decompile後变成那些 12/24 11:16
11F:→ ssccg: functional的class,所以才有少东西吧 12/24 11:16
12F:→ ssccg: Function那个是错在少掉generic,可以compile的写法是 12/24 11:16
13F:→ ssccg: new Function<Searchable, ContentEntityObject>() { ... 12/24 11:18
14F:→ ssccg: @Override不是必要的,那段错误讯息是指new Function() 12/24 11:22
15F:→ ssccg: =new Function<Object,Object>()没有实作该有的apply 12/24 11:22
16F:推 LPH66: 啊, 楼上比较有道理 12/25 00:21
17F:→ LPH66: generic 在编译成 bytecode 时就不见了没错 12/25 00:21