最近,我正在编写一个类,我决定将其作为包私有(即没有访问修饰符,或默认的)。它有一个内部类和一些private
帮助器方法,还有一个方法打算由同一个包中的类使用。所有这些类成员都是static
。但是后来我有了一个想法:这个方法应该有public
访问修饰符还是没有访问修饰符,就像包含它的类一样?
一方面,由于类本身是package-private的,只能在其包内访问和使用,因此没有实际的理由将public
方法设为。但同时,从语义上讲,这个方法意在成为类的公共特性,即类的一个意在外部使用的特性,因此修改它的访问本身将是有意义的。
对于那些喜欢查看代码的用户,
final class DummyRemover {
private DummyRemover() {
}
public static int remove(Map<String, ClassNode> classMap) {
return 0;
}
// ...
}
final class DummyRemover {
private DummyRemover() {
}
// Notice the modifier.
static int remove(Map<String, ClassNode> classMap) {
return 0;
}
// ...
}
这里最好的选择是什么?对于在这种情况下使用什么访问修饰符,有经验法则吗?
一个方法应该比它的封闭类具有更高的可见性有两个原因:
...这是为了通过子类来扩展的,子类最终可能是公共的,并且手边的方法应该是公共可用的。例如。
abstract class Base {
public void x() {}
}
public class Sub extends Base {
}
// Now, everyone can call:
new Sub().x();
但是,通常情况下,如果这是您的意图,您无论如何都会在接口中声明您的方法x()
。即使您没有在接口中声明x()
,从设计的角度来看,最好将基方法保持在与其类相同的可见性级别,并在子类中“打开”方法,因为这样可以更清楚地传达意图:
abstract class Base {
void x() {}
}
public class Sub extends Base {
/** public Javadoc here */
@Override
public void x() {
super.x();
}
}
我看不出有什么理由像您的情况一样将这种方法应用于静态方法。
...因为它从接口实现了一个方法。不幸的是,Java不提供package-private或private接口方法。因此,即使没有任何子类,即使接口本身可能是包专用的(甚至是嵌套专用的),下面的操作也是常见的:
final class Y implements X {
@Override
public void x() {}
}
这(不幸的是)也适用于接口上的静态类,这些类只能是公共的:
interface I {
/* implicitly public */ static void x() {}
}
privatePackageClass.java: publicAccessClass.java 这是对错误的描述: 如果有人能解释为什么会这样我会很感激。
本文向大家介绍asp.net 修饰符介绍(关于public、private、protected、internal),包括了asp.net 修饰符介绍(关于public、private、protected、internal)的使用技巧和注意事项,需要的朋友参考一下 1.private修饰符 private修饰符用于设置类或类成员的访问权限仅为所属类的内部, private也被称为私有修饰符。某些时候
在Java中,是否有明确的规则来规定何时使用每个访问修饰符,即默认的(包私有),,和,同时使和处理继承?
本文向大家介绍访问权限修饰符 public、private、protected, 以及不写(默认)时的区别?相关面试题,主要包含被问及访问权限修饰符 public、private、protected, 以及不写(默认)时的区别?时的应答技巧和注意事项,需要的朋友参考一下 修饰符 当前类 同包 子类 其他包 public √ √ √ √ protected √ √ √ × 默认(缺省) √ √ ×
有什么方法可以在Kotlin数据类中创建一个私有setter和一个公共getter吗?
本文向大家介绍简述private、protected、pubic、internal修饰符的访问权限相关面试题,主要包含被问及简述private、protected、pubic、internal修饰符的访问权限时的应答技巧和注意事项,需要的朋友参考一下 答: private : 私有成员, 在类的内部才可以访问(只能从其声明上下文中进行访问) protected : 保护成员,该类内部和从该类派生的