java-以编程方式实现一个接口,该接口以各种指定方式组合了同一接口的某些实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-以编程方式实现一个接口,该接口以各种指定方式组合了同一接口的某些实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1535字,纯文字阅读大概需要3分钟。
内容图文
实现以各种指定方式组合同一接口的某些实例的接口的最佳方法是什么?我需要对多个接口执行此操作,并且我希望尽量减少样板并仍然实现良好的效率,因为对于关键的生产系统,我需要这样做.
这是问题的示意图.
抽象地,我有一个通用的组合器类,它接收实例并指定各种组合器:
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 Reflection API中的动态代理来实现这样的接口,但是通过反射进行方法访问要慢一百倍.那么在这种情况下,有哪些替代样板和反射的方法呢?
解决方法:
我会建议使用动态代理-这是否真的比现在的常规方法调用要慢得多-我听说反射在幕后掩盖了很多魔术,从而加快了重复方法的调用. (如果速度慢了100倍,您确定会注意到吗?好吧,只要重新阅读您的问题-您就会发现!)
否则,您基本上会遇到以下问题的解决方案:使用Command对象将每个方法包装在界面中.然后,您可以将接口集合中的每个实例传递给命令对象进行处理.
当然,如果您感到勇敢和冒险,可以使用cglib,javassist或dynamic bytecode generator使用动态类生成来生成命令对象的实现以及组合器接口的实现.这样可以避免样板.
您也可能在方面方面取得了一些成功,特别是在编译时或加载时编织方面的AspectJ,因此避免了反射开销.对不起,我不能提供细节.
内容总结
以上是互联网集市为您收集整理的java-以编程方式实现一个接口,该接口以各种指定方式组合了同一接口的某些实例全部内容,希望文章能够帮你解决java-以编程方式实现一个接口,该接口以各种指定方式组合了同一接口的某些实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。