代码之家  ›  专栏  ›  技术社区  ›  MazeOfEncryption

是否有打印功能界面的方法?

  •  7
  • MazeOfEncryption  · 技术社区  · 6 年前

    假设我有一个接口:

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

    现在,假设我在主类的某个地方创建了该接口的实例,

    Function f = (x) -> x;
    

    如何以纯文本打印此函数? 有点像这样:

    int f (double x) {return x}
    

    运行 .toString 关于这个 Function 打印如下内容 Main$1@6d06d69c 。如何获取此接口的java表示?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Code-Apprentice    6 年前

    请记住,函数的文本(也称为“代码”)仅在编写时存在。将其编译为字节码,然后在Java虚拟机上运行。在运行时,您编写的原始代码不再存在,无法轻松检索。

        2
  •  1
  •   Stephen C    6 年前

    不幸的是,答案(从Java 9开始)是没有一种简单的方法来获取 toString() 方法为函数接口的任意实例提供有人类意义的值。

    以下是一些适用于某些用例的备选方案:

    • 不要使用lambda,而是使用类实现接口,并为 toString() 方法

    • 填充 Map<Function, String> 为您的所有 Function 实例。

    从理论上讲,可以构建一个库来检索lambda的“.class”文件,对其进行分析,计算出字节码的作用,然后生成适当的摘要。但这将是一个困难的项目。


    如果有一个简单、干净的解决方案就好了。也许“有人”会建议它作为Java未来版本的RFE。

        3
  •  -1
  •   user15039792    3 年前

    您需要通过提供double值显式调用接口中的方法,如下所示

    Function f = (d) -> d;
    System.out.print(f.function(2.0));
    
    推荐文章