使用 Runnable 作为回调/子例程是不好的做法吗?

2024-01-06

使用它是否被认为是不好的做法Runnable作为回调?

考虑到Runnable旨在与线程一起使用(请参阅它的JavaDoc),我想知道这是否可以 - 或者我是否应该为此目的创建自己的接口。

我所说的是这样的:

public class KeyBinding {
    public KeyBinding(KeyStroke stroke, Runnable handler) {
        //...
    }
}

不要使用 Runnable 作为回调;它可能会引起混乱:人们和代码质量工具有时期望它仅与线程一起使用。

我自己使用 Runnable 作为回调——我认为它似乎非常适合用作通用回调。一个月后,有人发现我的代码被剪掉了:

doneCallback.run();

他注意到doneCallback was a Runnable,并且调用.run()直接导致我们的代码质量分析程序(Sonar)发出警告。那么,为了修复警告?或者因为他认为目的是创建一个线程?,他分叉了一个新线程,并调用run()通过该线程代替。

然而,在那里分叉,破坏了东西。

为了避免混淆,现在我创建一个与线程没有任何关系的通用回调接口。我只是添加一个类Callback用一种方法call。我想我最好不要使用java.util.concurrent.Callback因为那也与线程有关。

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

使用 Runnable 作为回调/子例程是不好的做法吗? 的相关文章

随机推荐

  • 与 Python 等效的字符串格式化,使用 Perl 中的字典和哈希值进行格式化

    我喜欢 Python 使用字典格式化字符串的方式 print key1 s and key2 s aDictObj 我想在 Perl 中使用哈希来实现同样的目标 有没有任何片段或小型库可以做到这一点 EDIT 感谢您尝试这个答案 至于我 我
  • 从 javascript 脚本重定向 document.write

    我们希望在我们的网站上投放广告 但与我们洽谈的广告服务器在为我们提供足够快的广告速度方面存在问题 我认为问题是我们应该包括我们要在其中显示广告 然后它将下载脚本并使用 document write 插入一些 html 问题是对广告商网站的调
  • 在 MySQL 数据库中存储 IP 地址(IPv4 和 IPv6)

    好吧 现在我知道类似的问题可能已经被问过一百万次了 但我在这方面是一个真正的新手 我真的很感谢你在这里的帮助 基本上 我想将访问者的 IP 地址存储在 MySQL 中 以便以后检索和验证 我首先需要知道需要使用什么类型的字段来存储 IP 地
  • 如何在android中将网站中的JSON对象解析为数组列表

    如何将 Web 链接中的 JSON 对象解析到 Android 中并将不同的值存储到 ArrayList 中 用户的 JSON 对象如下所示 它来自一个网站 Users name Kane lon 4 371645 lat 31 39691
  • 全局数据库连接参数的存储位置

    Perl 中是否有存储数据库连接参数和其他全局设置的约定 类似于 NET 的 config 文件 背景 我继承了一个基于 Perl 的大型应用程序 其中有一堆 CGI 脚本和几个后台服务 所有这些服务都有硬编码的数据库主机名 用户名和密码
  • 在matlab中读取文本文件(数据转换)

    我正在读取一个文本文件matlab 这是代码 allData textread file s delimiter n numericalArray cellfun s sscanf s f allData un 0 Get Header h
  • 触发下拉菜单的变化事件

    我想使用jquery触发 document ready中下拉列表的更改事件 我在用户详细信息页面中有一个国家和州的级联下拉菜单 我如何使用 C 在 MVC 中设置国家 地区和州的值 根据用户 ID 从数据库中获取 我不太了解 JQuery
  • AWS - Cloudfront - 如何使用 Origin 自定义标头

    我对 AWS 还很陌生 现在正在参加一些不同的培训课程 我偶然发现的有趣的事情之一是能够在 Cloudfront 中添加自定义标头 也就是说 我似乎无法弄清楚 或找到简单易懂的文档 如何使用 利用此功能提供的功能 有人可以告诉我如何 如何访
  • 将“Java.lang.String”转换为“oracle.sql.TIMESTAMPTZ”

    我有以下这些Java lang String代表的值String的价值TIMESTAMPTZ 我需要转换这些Java lang String TO oracle sql TIMESTAMPTZ 2016 04 19 17 34 43 781
  • 在 range-v3 中,如何从一对迭代器创建范围?

    给定一对传统的 开始 和 结束 迭代器 如何创建与 range v3 兼容的范围 假设我正在编写一个接受两个迭代器的通用函数 以与遗留代码兼容 struct result bool keep line const std string re
  • 如何通过 Heroku 上的 HTTPS 连接加载 Laravel L5 swagger UI

    我尝试在 Heroku 上加载我的 Laravel L5 swagger URL 但我得到了空白屏幕 在使用 chrome 检查检查视图时 我发现以下错误 https MY APP NAME herokuapp com api docume
  • 接受_嵌套属性_for & :reject_if。在家长协会保存之前如何防止拒绝?

    class Gift lt ActiveRecord Base has many contributions accepts nested attributes for contributions reject if gt proc a a
  • Three.js - 将飞机缩放至全屏

    我将一架飞机添加到场景中 如下所示 Camera this three camera new THREE PerspectiveCamera 45 window innerWidth window innerHeight 0 1 60 Pl
  • Cassandra:什么是子列

    http wiki apache org cassandra Cas sandraLimitations http wiki apache org cassandra CassandraLimitations 引用 Cassandra 有两
  • 使用 JavaScript 加载 HTML 模板

    我正在努力寻找一个干净的解决方案来解决我的问题 并且想知道是否有人可以提供一些提示 我有 templates html 其中包含我想要加载到 JavaScript 中并使用的 HTML 片段集合 记住 templates html 不是加载
  • ASP.NET 成员身份更改密码后旧密码仍然有效

    我在一个小网站中使用 ASP NET 成员身份验证 我刚刚在测试过程中注意到一些有趣的事情 我试图让用户能够随时更改其登录密码 我将更改密码控件拖到表单中 我更改了测试帐户的密码 但现在所有密码仍然有效 我可以使用旧密码登录 也可以使用此特
  • 如何在 Python 中使用 MATLAB 中的 unique(a, 'rows') ?

    我正在将一些内容从 MATLAB 翻译成 Python 语言 有这个命令 unique a 在NumPy http en wikipedia org wiki NumPy 但由于 MATLAB 程序也运行 rows 命令 因此它给出的结果略
  • 使用管道插件在 jenkins 2.0 上安装节点

    我正在运行以下 docker 镜像jenkinsci jenkins 2 0 rc 1尝试 jenkins 2 0 和 管道 视图 我似乎无法安装节点 这是我的管道脚本 node tool name node 5 10 1 type jen
  • 是否有系统范围版本的首选项 API?

    在上一个问题中 我了解了首选项 API 不幸的是 它似乎只是用户特定的偏好 我还需要能够跨用户设置首选项 在 Java 中 独立于平台的方法是什么 EDIT 下面的信息很好 但是自从实施以来我遇到了一个障碍 首先在我的开发盒上进行了测试 W
  • 使用 Runnable 作为回调/子例程是不好的做法吗?

    使用它是否被认为是不好的做法Runnable作为回调 考虑到Runnable旨在与线程一起使用 请参阅它的JavaDoc 我想知道这是否可以 或者我是否应该为此目的创建自己的接口 我所说的是这样的 public class KeyBindi