- 主题:java 现在可以做到函数的返回值是一个函数吗?
rt
c#, go, js
目前都是可以的
如果可以的话,怎么定义啊?
--
FROM 120.244.238.*
interface Runable {
void run();
}
Runable fun() {
return () -> { System.out.println("hello, there."); }
}
【 在 feed (鳄鱼) 的大作中提到: 】
: rt
: c#, go, js
: 目前都是可以的
: ...................
--
FROM 110.81.13.*
c#的delegate,golang的func(),js的function都是一等公民(first-class citizen),在这个意义上,java并没有完全与之对等的语言概念。
但java中并非不能返回一个函数,或者将函数赋值给某个变量,这项工作应该由jdk 7时代引入的java.lang.invoke.MethodHandles来完成。(详见:
https://www.infoq.cn/article/jdk-dynamically-typed-language)
上一楼列的谓词函数并不能满足承载函数这个需求,因为谓词与方法签名中的参数表和返回值是直接相关的,不同签名的方法要用不同的谓词来抽象。
--
FROM 14.123.254.*
谢谢
感觉语法看起来还是有点怪异,还是不够简洁
但也够用了
【 在 hgoldfish 的大作中提到: 】
: interface Runable {
: void run();
: }
: ...................
--
FROM 120.244.238.*
lambda表达式啊
【 在 feed 的大作中提到: 】
: 谢谢
: 感觉语法看起来还是有点怪异,还是不够简洁
: 但也够用了
: ....................
- 来自「最水木 for iPhone13,2」
--
FROM 120.244.232.*
什么意思? 可以不用先定义一个interface吗?
【 在 chzhang7901 的大作中提到: 】
: lambda表达式啊
:
: - 来自「最水木 for iPhone13,2」
--
FROM 120.244.238.*
那个 interface 是 java.lang.Runnable,不用自己定义。
反正一般可以用现成的 interface
【 在 feed (鳄鱼) 的大作中提到: 】
: 什么意思? 可以不用先定义一个interface吗?
--
FROM 110.81.13.*
不可以,java是纯面向对象的(除了基本类型外),java里面没有函数这一说,必须是某个类下的成员函数(方法)
只能通过定义一个接口
【 在 feed 的大作中提到: 】
: rt
: c#, go, js
: 目前都是可以的
: ...................
--
FROM 219.142.246.*
JAVA的语法糖对单一函数接口有额外支持
无需接口声明直接写函数实现就行了
Return (参数表)->{方法体}
【 在 feed 的大作中提到: 】
: 谢谢
: 感觉语法看起来还是有点怪异,还是不够简洁
: 但也够用了
: ...................
--
FROM 27.159.66.*
得定义吧
【 在 feed 的大作中提到: 】
: 什么意思? 可以不用先定义一个interface吗?
:
: 【 在 chzhang7901 的大作中提到: 】
: ....................
- 来自「最水木 for iPhone13,2」
--
FROM 120.244.232.*