在下面的例子中,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