一种可能的情况:
当您在 Intellij(包括 Android Studio 在内的任何版本)中添加新包时,该命令会根据您右键单击以选择 New -> Package 的位置的上下文运行。将New -> Package 认为是New -> Add subpackage at this point in three 的真正含义。
所以你右键单击app/java 的源根并选择New -> Package 并输入one.two.three 你最终会得到:
app
+-- java
+-- one
+-- two
+-- three
但是,如果您右键单击 app/java/one/two/three 项目树中的新节点并选择 New -> Package 键入 one.two.other 您最终会将包嵌套在另一个中。您的树将是:
app
+-- java
+-- one
+-- two
+-- three
+-- one <---- OOOPS!
+-- two
+-- other
但如果我在app/java 的根处右击并输入相同的包名one.two.other,我最终会得到:
app
+-- java
+-- one
+-- two
+-- three
+-- other
我也可以点击app/one/two 的树,只输入other 来获得相同的结果,同样因为New -> Package 正在向我碰巧采取行动的地方添加一个子包。
仅仅因为您在New -> Package 中键入了一个完全限定的包名称,并不意味着 Intellij 知道您要返回并从根目录开始。它会从您单击的任何位置嵌套,即使您的意图可能很明显(对您),Intellij 始终从您开始操作的位置执行操作。
一些实际操作中的屏幕截图...
在错误的地方添加:(注意项目树中的选择)
结果:
在正确的位置添加:(注意项目树中的选择)
结果:
也在正确的位置添加:(展开折叠的中间包以查看为树)
结果: