Java接口中的方法应该使用或不使用公共访问修饰符来声明?
当然,从技术上讲,这并不重要。实现接口的类方法总是公共的。但是什么是更好的约定呢?
Java本身在这方面并不一致。参见Collection vs. Comparable或Future vs. ScriptEngine。
Java接口中的方法应该使用或不使用公共访问修饰符来声明?
当然,从技术上讲,这并不重要。实现接口的类方法总是公共的。但是什么是更好的约定呢?
Java本身在这方面并不一致。参见Collection vs. Comparable或Future vs. ScriptEngine。
当前回答
随着Java 8/9中接口方法的私有、静态、默认修饰符的引入,事情变得更加复杂,我倾向于认为完整的声明更具可读性(需要Java 9编译):
public interface MyInterface {
//minimal
int CONST00 = 0;
void method00();
static void method01() {}
default void method02() {}
private static void method03() {}
private void method04() {}
//full
public static final int CONST10 = 0;
public abstract void method10();
public static void method11() {}
public default void method12() {}
private static void method13() {}
private void method14() {}
}
其他回答
在Java接口中应该省略公共修饰符(在我看来)。
因为它没有添加任何额外的信息,它只是把注意力从重要的东西上转移开。
大多数风格指南会建议你去掉它,但是当然,最重要的事情是在你的代码库中保持一致,特别是对于每个接口。下面的例子很容易让Java不是100%流利的人感到困惑:
public interface Foo{
public void MakeFoo();
void PerformBar();
}
随着Java 8/9中接口方法的私有、静态、默认修饰符的引入,事情变得更加复杂,我倾向于认为完整的声明更具可读性(需要Java 9编译):
public interface MyInterface {
//minimal
int CONST00 = 0;
void method00();
static void method01() {}
default void method02() {}
private static void method03() {}
private void method04() {}
//full
public static final int CONST10 = 0;
public abstract void method10();
public static void method11() {}
public default void method12() {}
private static void method13() {}
private void method14() {}
}
人们将通过IDE或Javadoc中的代码完成来了解您的接口,而不是通过阅读源代码。所以在源代码中加入“公共”是没有意义的——没有人会阅读源代码。
我总是写我在没有接口的情况下使用的东西,我在写一个直接的实现,也就是说,我将使用public。
JLS明确了这一点:
允许为接口中声明的方法冗余地指定公共和/或抽象修饰符,但出于风格考虑,不建议这样做。