假设我有一个界面:
public interface Function {
double function (double input);
}
现在,假设我在我的主类
中的某个地方创建了这个接口的实例Function f = (x) -> x;
如何以纯文本格式打印此功能? 所以,有点像这样:
int f (double x) {return x}
在此.toString
上运行Function
会打印Main$1@6d06d69c
之类的内容。我怎样才能获得此接口的java表示?
答案 0 :(得分:2)
请记住,函数的文本(也称为“代码”)仅在您编写时才存在。您将其编译为字节码,然后在Java虚拟机上运行。在运行时,您编写的原始代码不再存在且无法轻松检索。
答案 1 :(得分:1)
不幸的是,答案(从Java 9开始)是,没有简单的方法可以让toString()
方法为函数接口的任意实例提供具有人类意义的值。< / p>
以下是一些适用于某些用例的替代方案:
不使用lambda,而是使用类实现接口,并为toString()
方法包含适当的覆盖。
为Map<Function, String>
个实例填充一个包含有意义名称的Function
。
理论上可以构建一个可以检索&#34; .class&#34; (比如说)一个lambda的文件,分析它,找出字节码的作用,然后产生一个合适的摘要。但这项工程很难。
如果有一个简单,干净的解决方案,那就太好了。也许&#34;某人&#34;可以建议将其作为未来Java版本的RFE。
答案 2 :(得分:-1)
您需要通过提供 double 值来显式调用接口中的方法,如下所示
Function f = (d) -> d;
System.out.print(f.function(2.0));