【发布时间】:2016-06-03 14:04:15
【问题描述】:
最近,我正在编写一个我决定为包私有的类(也就是说,没有访问修饰符,或者 默认 一个)。它有一个内部类和一些private 辅助方法,以及一个旨在由同一包中的类使用的方法。所有这些班级成员都是static。但是后来我有了一个想法:这个方法应该有public访问修饰符还是没有访问修饰符,就像包含它的类一样?
一方面,由于类本身是包私有的,它只能在其包内被访问和使用,所以没有实际的理由来创建方法public。但同时,从语义上来说,这个方法是打算成为类的一个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;
}
// ...
}
这里最好的选择是什么?是否有经验法则来决定在这种情况下使用哪些访问修饰符?
【问题讨论】:
-
经验法则:从限制性最强的修饰符开始,仅在必要时更改(“向上”一级)。
-
我真的不认为这是对 C# 问题的欺骗,因为 C# 中的
internal实际上与 Java 中的默认访问具有完全不同的语义。答案是相似的,但我认为这个问题不一定是真正的重复。 -
@DanielPryden:那是因为我链接了错误的问题。 sigh This is the right one.(刚回来重新打开,看到有人已经这样做了。)对于这个问题(和那个问题)来说,语义足够相似。
标签: java