java – 多个枚举与一个枚举
发布时间:2020-12-15 00:41:24 所属栏目:Java 来源:网络整理
导读:当我偶然发现一些我不明白为什么这样做的事情时,我正在查看反应流规范的Publisher( AsyncIterablePublisher.java)的示例实现. static interface Signal {};enum Cancel implements Signal { Instance; };enum Subscribe implements Signal { Instance; };enu
当我偶然发现一些我不明白为什么这样做的事情时,我正在查看反应流规范的Publisher(
AsyncIterablePublisher.java)的示例实现.
static interface Signal {}; enum Cancel implements Signal { Instance; }; enum Subscribe implements Signal { Instance; }; enum Send implements Signal { Instance; }; 说实话,我不是这样一个高级程序员,而是写这个的人,我确信有理由这样做.但是我也无法解释为什么它会比这更好(这就是我会做到的). enum Signal { Cancel,Subscribe,Send; } 有人可以向我解释为什么会更好吗?优点缺点? 解决方法
不要太严格,这里是我对这段代码的解释.让我们称之为反应流Roland的所有者.
起初,Roland需要所有入站信号的通用接口 static interface Signal {}; ConcurrentLinkedQueue<Signal> inboundSignals = new ConcurrentLinkedQueue<Signal>(); 像取消,订阅和发送这样的信号总是有相同的目的是不可变的并且经常发生,所以将它们实现为Joshua Bloch’s Singleton是好主意: enum Cancel implements Signal { Instance; }; enum Subscribe implements Signal { Instance; }; enum Send implements Signal { Instance; }; 另一种方法是做同样的建议和我的最爱: enum CommonSignals implements Signal{ Cancel { @Override void debug() { System.out.println("Cancel"); } },Subscribe { @Override void debug() { System.out.println("Subscribe"); } },Send { @Override void debug() { System.out.println("Send"); } }; abstract void debug(); [...] some other methods I could need in the future } 如您所见,这是一种不同的实现.但这个想法是一样的 – 信号单身 我们继续前进并找到此代码: static final class Request implements Signal { final long n; Request(final long n) { // every Request has different value of n this.n = n; } }; 由于inboundSignals可以包含多个Request对象,因此无法将此类型的Signal实现为Singleton.因此,它不能是CommonSignals的成员或实现为枚举. 结论 罗兰使用了许多可能性来实现单身人士.我认为这更像是一种品味如何去做. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |