Java 8:自动合成多个接口的默认方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 8:自动合成多个接口的默认方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1644字,纯文字阅读大概需要3分钟。
内容图文
我有类实现多个接口,它们具有相同的默认默认方法.我想知道如何从所有接口合成默认方法.例如:
interface IA {
default void doA() {}
default void process() {
// do something
}
}
interface IB {
default void doB() {}
default void process() {
// do something
}
}
interface IC {
default void doC() {}
default void process() {
// do something
}
}
// other similar interfaces
....
class MyClass implements IA, IB, IC, ... {
public void process() {
// question: how to avoid iterate all the interfaces?
IA.super.process();
IB.super.process();
IC.super.process();
...
}
}
class AnotherClass implements IA, ID, IF, IH, ... {
public void process() {
IA.super.process();
ID.super.process();
IF.super.process();
IH.super.process();
...
}
}
在实现中,该方法只是从所有接口合成process().但是我必须显式地调用IA.super.process(),IB.super.process(),IC.super.process().如果接口列表很长,那么编写所有接口列表是很痛苦的.此外,我可能有不同的类来实现不同的接口组合.是否有其他语法糖/设计模式/库允许我自动执行?
更新:与复合模式进行比较
复合图案也很可观.但是我想使用默认方法作为mixin来为类提供不同的行为,而复合模式在这里不给我静态类型检查.复合模式还引入了额外的内存占用.
解决方法:
我认为你的错误是定义了多个有效相同的接口(除了不同的默认行为).这在我看来似乎是错误的并且违反了DRY.
我会使用composite pattern来构建它:
interface Processable
{
void process();
}
public interface IA extends Processable //and IB, IC etc.
{
default void doA()
{
// Do some stuff
}
}
final class A implements IA
{
void process() { /* whatever */ }
}
class Composite implements IA //, IB, IC etc.
{
List<Processable> components = Arrays.asList(
new A(), new B(), ...
);
void process()
{
for(Processable p : components) p.process();
}
}
内容总结
以上是互联网集市为您收集整理的Java 8:自动合成多个接口的默认方法全部内容,希望文章能够帮你解决Java 8:自动合成多个接口的默认方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。