Tag: jsr335

Java 8接口方法中不允许“同步”的原因是什么?

在Java 8中,我可以很容易地写出: interface Interface1 { default void method1() { synchronized (this) { // Something } } static void method2() { synchronized (Interface1.class) { // Something } } } 我将得到我可以在类中使用的完全同步语义。 但是我不能在方法声明中使用synchronized修饰符: interface Interface2 { default synchronized void method1() { // ^^^^^^^^^^^^ Modifier 'synchronized' not allowed here } static synchronized void method2() { // ^^^^^^^^^^^^ Modifier 'synchronized' […]

为什么在Java 8接口方法中不允许“final”?

Java 8的最有用的function之一是接口上的新的default方法。 基本上有两个原因(可能还有其他原因)为什么被引入: 提供实际的默认实现。 示例: Iterator.remove() 允许JDK API进化。 例如: Iterable.forEach() 从APIdevise者的angular度来看,我希望能够在接口方法上使用其他修饰符,例如final 。 这在添加便利方法时很有用,可以防止实现类中的“意外”覆盖: interface Sender { // Convenience method to send an empty message default final void send() { send(null); } // Implementations should only implement this method void send(String message); } 如果Sender是一个class级,以上是已经很普遍的做法: abstract class Sender { // Convenience method to send an empty message […]