有没有办法打印功能界面?

时间:2018-04-20 18:07:57

标签: java interface functional-interface

假设我有一个界面:

public interface Function {
    double function (double input);
}

现在,假设我在我的主类

中的某个地方创建了这个接口的实例
Function f = (x) -> x;

如何以纯文本格式打印此功能? 所以,有点像这样:

int f (double x) {return x}

在此.toString上运行Function会打印Main$1@6d06d69c之类的内容。我怎样才能获得此接口的java表示?

3 个答案:

答案 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));