问下 inner class 里想写 static nested class 作为工具类的时候该怎么办

2019-04-02 02:55:06 +08:00
 karia

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..
}
1838 次点击
所在节点    Java
5 条回复
karia
2019-04-02 03:40:27 +08:00
可能应该把 Inner 写成 package-private 的顶级类了
karia
2019-04-02 03:44:19 +08:00
但是 Inner 要访问 Outer 的 field 的时候非要这么拆就影响內聚
lzdhlsc
2019-04-02 04:19:14 +08:00
inner static class 如何? public static class Node...
zealot0630
2019-04-02 09:21:28 +08:00
static is evil。static 破坏了语言的 lexical scope,outer class 的成员明显在你的 scope 里面,你却无法访问。参考 scala 是怎么去掉 static 关键字的,一方面用 Singleton 取代了,另一方面,强制你必须放外面去
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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/551053

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX