以编程方式实现一个接口,该接口以各种指定的方式组合同一接口的一些实例

2024-01-15

实现以各种指定方式组合同一接口的一些实例的接口的最佳方法是什么?我需要对多个接口执行此操作,并且希望最大限度地减少样板文件并仍然实现良好的效率,因为我需要为关键的生产系统执行此操作。

这是问题的草图。

抽象地说,我有一个通用的组合器类,它接受实例并指定各种组合器:

class Combiner<I> {
   I[] instances;

   <T> T combineSomeWay(InstanceMethod<I,T> method) {
     // ... method.call(instances[i]) ... combined in some way ...
   }

   // more combinators
}

现在,假设我想实现以下接口以及其他接口:

Interface Foo {
  String bar(int baz);
}

我想最终得到这样的代码:

class FooCombiner implements Foo {
  Combiner<Foo> combiner;

  @Override 
  public String bar(final int baz) {
    return combiner.combineSomeWay(new InstanceMethod<Foo, String> {
      @Override public call(Foo instance) { return instance.bar(baz); } 
    });
  }
}

现在,如果接口有很多方法,这很快就会变得冗长而冗长。我知道我可以使用 Java 反射 API 的动态代理来实现此类接口,但通过反射访问方法要慢一百倍。那么在这种情况下,除了样板文件和反射之外还有什么替代方案呢?


我会建议动态代理 - 它真的比现在的常规方法调用慢得多吗 - 我听说反射在幕后发挥了相当大的魔力来加速重复的方法调用。 (如果速度慢了 100 倍,你确定你会注意到吗?好吧,只需重新阅读你的问题 - 你就会注意到!)

否则,您的问题基本上已经有了解决方案:使用 Command 对象将每个方法包装在您的界面中。然后,您可以将接口集合中的每个实例传递给命令对象进行处理。

当然,如果您有勇气和冒险精神,您可以使用动态类生成(使用 cglib、javassist 等)来生成命令对象的实现以及组合器接口的实现动态字节码生成器 http://java-source.net/open-source/bytecode-libraries。这将避免样板文件。

您还可能在方面方面取得一些成功,特别是在编译时或加载时编织方面的aspectJ,因此您可以避免反射开销。抱歉我无法提供详细信息。

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

以编程方式实现一个接口,该接口以各种指定的方式组合同一接口的一些实例 的相关文章

  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 使用不同的输入参数多次运行 Fortran 代码

    我想使用不同的输入参数集多次运行 Fortran 77 程序 我已经确保输出文件名会根据我使用的不同输入参数而更改 但我不确定如何运行具有不同输入参数集的程序 而不必每次都转到代码来更改参数 为了说明我的问题 这里有一个简单的代码 PROG
  • 带皮肤的 BottomSheetDialogFragment 主题

    如何结合BottomSheetDialogFragment主题与其他主题 我的应用程序具有使用主题制作的皮肤 BottomSheetDialogFragment应该有圆角 我使用以下方法实现这一点 override fun onCreate
  • 为 iPhone 创建组合框 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 由于没有预先存在的用于创建组合框 或选择框 的组件 如通过 Safari 在网页上看到的那样 有人可以
  • 如何将kinect的深度图像与彩色图像对齐

    Kinect 上的颜色和深度传感器生成的图像略有不对齐 我怎样才能改变它们以使它们对齐 关键是调用 Runtime NuiCamera GetColorPixelCoordinatesFromDepthPixel 这是 Runtime 类的
  • 4-5-4 国家零售基金会日历 csv 下载或创建函数

    我一直在谷歌上到处搜索 但没有找到这个 我工作的零售客户使用 NRFretail 日历 NRF site http nrf com 我想知道是否有人曾经使用这些值创建过查找 维度表 Thanks 您可以找到一个 perl 模块 可以在 CP
  • 如何在 iOS 中裁剪视频

    我正在查看 Apple 提供的 RosyWriter 示例代码作为起点 我想找到一种裁剪视频的方法 所以我有 iPhone 相机的全分辨率视频 但我只想使用其中的裁剪部分 并旋转该子部分 我认为在captureOutput didOutpu
  • 如何在wxPython中制作类似日志框的东西

    我假设这可以通过多行文本框实现 但不确定如何做到这一点 我想做的是在我的 wxPython 程序中创建一个日志框 当某些操作发生时我可以在其中写入消息 另外 我不仅需要在事件发生时写入消息 还需要在代码中的某些时间写入消息 我如何才能重绘窗
  • Castle Windsor:当我的程序集无法访问基础类型时,如何注册工厂方法?

    我有一个项目 其中我的业务层是使用 DI 构建的 但我正在尝试采取额外的步骤并使用 Windsor 来管理对象构建 假设我有一个预先存在的数据层 我不想修改 可以通过以下接口访问 interface IDataFactory IDataSe
  • jQuery 在网站/内容加载后淡入淡出?

    是否有任何教程或插件可以在网站正确加载后淡入视图 以限制任何不和谐等 使内容基本上顺利显示 我想如果它只是一个特定区域会更容易 因为页眉或页脚已经被缓存 从以前的页面 例如 带有各种缩略图的作品集页面 它们只有在准备好后才会顺利显示 这可以
  • 如何告诉 Django,memcached 运行时的项目大小大于默认值?

    我使用新设置来增加 memcached 中的项目大小 但我无法通过 Django 后端存储大于 1mb 的内容 我知道memcache模块需要一些设置来实现这一点 Django 在后端使用这个模块 From memcache py 可以保存
  • Android 如何传递 Activity.class 作为函数的参数

    我最近从 Python 迁移到 Android 但被困在这里 这是我的类声明 用于为接受必要参数的警报对话框创建一个通用函数 public static AlertDialog Builder getAlertDialog String s
  • 我可以在 MVC 3 中拥有/链接 1 个以上的 _Layout 页面吗?对于 cshtml 页面?

    我有一个布局页面和一些使用它的页面 但我想在一些使用它的子页面上实现导航控件 所以我想使用另一个嵌套布局页面 这可能吗 是的 效果很好 只需告诉您的布局页面使用另一个布局页面 Layout pathToMyOtherLayout 您还可以使
  • Android - 调用默认浏览器并重定向到指定的网址

    Hi我想编写一个应用程序来调用默认浏览器并重定向到指定的网址 任何建议 1 调用默认浏览器 2 重定向到指定的 url Thanks 您只想使用网页的 Uri 作为数据元素来启动 ACTION VIEW 意图 Intent httpInte
  • this._mouseInit() 不是一个函数

    我刚刚将代码更新到 jqueryui 1 8 它给了我这个错误 this mouseInit is not a function 我该如何解决这个问题 我有一个可以让鼠标开始拖动和停止的小部件 这是我的代码 widget ui boxToo
  • header('P3P: CP="CAO PSA OUR"'); 是什么意思?做?

    What is header P3P CP CAO PSA OUR for 如何 为什么让这个脚本在 IE 中正常工作 session start if session is registered pre myusername header
  • javascript中相对路径和绝对路径的区别

    有一些小的澄清 据我所知 这些是相对路径和绝对路径 Completely relative img src kitten png Absolute in all respects img src http www foo com image
  • 位置为绝对的元素上的垂直空间

    我如何制作元素position absolute and 动态高度仅使用 css 占据垂直空间 我可以使用容器和显示方面的技巧吗 不幸的是 根据定义 使用绝对定位意味着您的元素不再占用空间 所以不行 只能通过css没有办法做到这一点 您当然
  • 如何检查多值参数中是否选择了某个值

    在 SSRS 2008 中 我使用多值参数为特定参数选择多个值 在我的报告中 我有条件格式 如果选择了该项目 则特定标签必须为蓝色 否则它会保持黑色 我的直觉是尝试使用 SQL 方式 但我错了 Switch Fields groupType
  • 在 C++ 中返回错误代码的正确方法是什么

    我正在使用错误代码来处理我的 C 项目中的错误 问题是如何从应该返回某些变量 对象的函数返回错误代码 考虑一下 long val myobject doSomething 这里 myobject 是某个类的对象 如果 doSomething
  • 以编程方式实现一个接口,该接口以各种指定的方式组合同一接口的一些实例

    实现以各种指定方式组合同一接口的一些实例的接口的最佳方法是什么 我需要对多个接口执行此操作 并且希望最大限度地减少样板文件并仍然实现良好的效率 因为我需要为关键的生产系统执行此操作 这是问题的草图 抽象地说 我有一个通用的组合器类 它接受实