在下面的例子中,import
是必要的,否則Java的編譯器會抱怨Nested
不能在Iterable<Nested>
解析爲一個類型:爲什麼我必須在定義的類中導入嵌套類?
package test;
import test.Example.Nested;
public class Example implements Iterable<Nested> {
public final static class Nested {}
}
(使用Iterable<Example.Nested>
,而不是進口的作品也一樣)
這隻有在外部類的定義中引用嵌套類時纔會發生,例如當使用它作爲參數類型時,而且在擴展/實現它時(編譯器可以解析類時會導致另一個錯誤),或者在註釋中使用它時。
我的問題是:爲什麼編譯器無法在沒有顯式聲明的情況下找到嵌套類?
我覺得OP是有外部類應該能夠訪問它的嵌套類而不用'Outer.'前綴的問題。例如,你可以在'Example'類中聲明'Nested'字段,而不必使用'Example.Nested'類型聲明,但是你不能在'Iterable'中使用它。 –
Pshemo
@AmirPashazadeh:那麼,OP不*使用import子句;遵循Outer.Inner公約將起作用,並且是典型的方式。但是如果他想要一個答案「爲什麼」,我能給出的最好的答案就是「這就是Java的工作方式」。 – Jimothy
@AmirPashazadeh:如果您的異議是嵌套類鏈接,我提供它,因爲它解釋瞭如何引用嵌套類(Outer.Inner)等。 – Jimothy