Inner class 里不能写 static nested class,可是有些场景感觉这么封装最合适 Orz
public class Outer {
class Inner {
// static class Helper {} // error
}
}
举个栗子
public class BTree {
class Node {
/*static*/ class Pair {
final int k;
final double v;
}
// blabla..
}
// blabla..
}
1
karia OP 可能应该把 Inner 写成 package-private 的顶级类了
|
2
karia OP 但是 Inner 要访问 Outer 的 field 的时候非要这么拆就影响內聚
|
3
lzdhlsc 2019-04-02 04:19:14 +08:00
inner static class 如何? public static class Node...
|
4
zealot0630 2019-04-02 09:21:28 +08:00 via Android
static is evil。static 破坏了语言的 lexical scope,outer class 的成员明显在你的 scope 里面,你却无法访问。参考 scala 是怎么去掉 static 关键字的,一方面用 Singleton 取代了,另一方面,强制你必须放外面去
|
5
ChanKc 2019-04-09 23:40:58 +08:00
@zealot0630 If you declare a member class that does not require access to an enclosing instance, always put the static modifier in its declaration, making it a static rather than a nonstatic member class.
来自 Effective Java 3rd Edition Item 24 |