是否有可能(如何)在 Java 运行时获取方法引用的名称? [复制]

2024-04-01

我最近使用了很多方法引用和 lambda,并且想知道在运行时是否可以打印以屏幕 lambda 的源(即它的名称),只是出于调试原因。我认为可以使用反射,通过在 getName() 中调用 getClass() 来实现,但我找不到用于查找原始源引用名称的方法。

我有一个功能界面,例如:

@FunctionalInterface
public interface FooInterface {
    // function etc etc irrelevant
    public void method();

    public default String getName() {
        // returns the name of the method reference which this is used to define
    }
}

然后假设我希望测试运行该界面,并将功能界面的源代码打印到屏幕上。

public static void doStuff(FooInterface f) {
    // prints the lambda name that is used to create f
    System.out.println(f.getName());

    // runs the method itself
    f.method();
}

所以如果我这样做:

doStuff(Foo::aMethodReference);

它应该在屏幕上打印类似:“方法引用”的内容,这样我就可以知道在运行时正在运行哪些方法,以什么顺序运行等。

考虑到 lambda 不完全是对象,我很怀疑这是可能的,但是嘿,我想可能有一个解决方法。此外,eclipse调试工具只是说它是一个lambda,没有任何其他信息,lambda是否保留任何这些信息?或者在运行时全部丢失?

干杯。 (如果有什么区别的话,我正在使用 JDK 11)


正如你所说,你只需要这个用于调试目的,这里有一个技巧(即肮脏的黑客),它可以让你做你想做的事。

首先,你的功能接口必须是Serializable:

@FunctionalInterface
public interface FooInterface extends Serializable {

    void method();
}

现在,您可以使用这个无记录的、内部实现相关的和风险极大

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有可能(如何)在 Java 运行时获取方法引用的名称? [复制] 的相关文章

  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 使用 Excel 宏传递变量以完成句子

    我是 Excel 宏的新手 如果我问了什么愚蠢的问题 请纠正我 我想在 Excel 工作表中打印以下 CALL 语句 其中 SCHEMA NAME PROCEDURE NAME INPUT DATE EXIT DATE 将被参数化 并且我想
  • 将附加文件添加到 VSTS 发布到 azure web 应用程序

    我在 VSTS 中有一个版本可以将我的 web 应用程序部署到 azure 应用程序服务 为此 我使用 Azure 应用服务部署步骤 在正常部署 web 应用程序后 我想从另一个构建结果中添加额外的 zip 工件 我只想将这些文件复制到 a
  • 将 HTML5 画布转换为 SVG 的方法?

    我需要将 HTML5 画布转换为 SVG 进行编辑 我怎样才能实现这个目标 Try canvas2svg js https github com gliffy canvas2svg Demo http gliffy github io ca
  • RStudio Shiny 动态选择

    在我的 RStudio Shiny 中 我得到了我的selectInput在我里面server R 以及关于ui R我有一个tags语句来更改选择框的宽度和高度 它在页面加载时起作用 但当我进入单一类型时它会恢复为默认大小 有什么想法如何解
  • 您正在使用 X509TrustManager 的不安全实现

    我在 Google Play 中有一个应用程序 今天我收到一封来自 Google 的邮件 内容如下 Google Play 警告 您正在使用不安全的实现 X509信任管理器 它介绍了有关 SSL 证书问题以及解决该问题的方法 我是出于好奇才
  • Swift - 使用 CGContext 用手指绘图

    我正在尝试制作一个绘图应用程序 我有一个自定义 UIView class DrawView UIView var touch UITouch var lastPoint CGPoint var currentPoint CGPoint ov
  • Phonegap 代码作为 Web 应用程序

    我正在考虑重新使用我的phonegap html css 和js 代码作为网络应用程序 我将仔细检查并删除所有仅限移动设备的功能 目的是拥有一个提供一些移动应用程序功能的网络应用程序 我目前使用的移动设备功能很少 但我猜维护我的移动应用程序
  • 配置vscode json格式空间

    我想配置 vscode 以使用 2 个缩进空间 而不是默认情况下的 4 个缩进空间 来格式化我的 JSON 对象 我怎样才能做到这一点 将以下行粘贴到 VSCode 中的 settings json 中 然后就完成了 json editor
  • 使用 Xpath 比较属性值

    给定以下文档结构 我如何使用 Xpath 检查两个属性值是否匹配
  • 类型错误:无法 pickle _thread.lock 对象

    尝试使用共享队列同时运行两个不同的函数并收到错误 如何使用共享队列同时运行两个函数 这是 Windows 7 上的 Python 版本 3 6 from multiprocessing import Process from queue i
  • (播放 2.4)特征中的依赖注入?

    在play 2 4中 是否可以在trait中使用依赖注入 有例子吗 Thanks 我在这里谈论 Guice 的运行时 DI 因为它是 Play 使用的默认方法 其他 DI 方法或框架可能有所不同 不可能将依赖项注入到特征中 因为特征不可实例
  • 查看 sp_execute 正在做什么

    在我的 MS SQL Profiler 中 我看到很多这样的小查询 执行 sp execute 1 p0 15954 我知道从理论上讲这是可行的 这是执行先前创建的查询并传入特定参数 但问题是我不确定是什么原因导致这些查询 有没有办法查看这
  • 如何避免使用 KITKAT 4.4.2 版本的 SD 卡上出现“EACCES 权限被拒绝”的情况。谷歌的新政策

    android kitkat 4 4 2 版本是针对 writeaccess 实现的新的 google 策略 到目前为止我还不明白 我在其他应用程序中读到了很多有关此问题的信息 他们收到 EACCES 权限被拒绝 的消息 我的应用程序需要写
  • Proxifier 是如何工作的?

    如你所知Proxifier是一个程序 允许不支持通过代理服务器工作的网络应用程序通过 HTTPS 或 SOCKS 进行操作 它可以处理来自正在运行的应用程序的任何传输 我想知道它是如何做到这一点以及我如何写一个这样的 FreeCap htt
  • d3.按属性值选择

    我是 d3 的新手 我有这样的定义 node node enter append circle attr id function d return d id attr class node on mouseover mouseover no
  • java.util.Date(int,int,int) 已弃用 [重复]

    这个问题在这里已经有答案了 构造函数java util Date int int int 已弃用 有没有像Java一样简单设置日期的方法 执行此操作的未弃用方法是什么 Date date new Date 2015 3 2 执行此操作的未弃
  • 在应用程序启动时以模态方式呈现视图控制器

    我的应用程序有一个设置屏幕 如果满足某些条件 该屏幕应以模态方式呈现在根视图控制器上 我已经在 SO 和互联网上四处查看 到目前为止 关于如何执行此操作的最接近的答案在这里 AppDelegate rootViewController 和
  • 使用依赖注入和“完成”编写 Karma + Mocha 测试?

    在 mocha 中编写 Karma 单元测试最优雅的方法是什么 它既具有依赖注入又具有done 依赖注入 describe cows function it farts a lot inject function cow do stuff
  • 从绝对名称 C# 获取 URI/URL 的父名称

    给定一个绝对 URI URL 我想获取一个不包含叶部分的 URI URL 例如 给定http foo com bar baz html http foo com bar baz html 我应该得到http foo com bar http
  • 是否有可能(如何)在 Java 运行时获取方法引用的名称? [复制]

    这个问题在这里已经有答案了 我最近使用了很多方法引用和 lambda 并且想知道在运行时是否可以打印以屏幕 lambda 的源 即它的名称 只是出于调试原因 我认为可以使用反射 通过在 getName 中调用 getClass 来实现 但我