尝试从类中导入嵌套类型

ajb*_*ajb 9 java

我无法弄清楚为什么这不起作用.我的顶级类是未命名的包(现在;我打算稍后设置包).

Iclass1.java:

public class Iclass1 {    
    public static class Nested1 {
        // whatever
    }    
}
Run Code Online (Sandbox Code Playgroud)

Iclass2.java:

import Iclass1.*;
public class Iclass2 {
    private Nested1 someMember;
    // etc.
}
Run Code Online (Sandbox Code Playgroud)

编译完成后Iclass1.java没有错误,编译器在编译时会抱怨Iclass2.java:"错误:包Iclass1不存在".

但JLS说:(7.5.2)

import PackageOrTypeName . * ;
Run Code Online (Sandbox Code Playgroud)

PackageOrTypeName必须是包的规范名称(第6.5节),类类型,接口类型,枚举类型或注释类型.

和:(6.7)

在未命名的包中声明的顶级类或顶级接口的完全限定名称是类或接口的简单名称.

对于每个基本类型,命名包,顶级类和顶级接口,规范名称与完全限定名称相同.

因此,似乎Iclass1是我试图在其中使用的类型的规范名称import.我究竟做错了什么?

(PS我现在认为import static会更好,但它也不起作用.)

Saj*_*tta 9

由于您没有包,请不要使用import.

因为JLS§7.5告诉你不要:

在未命名的包(第7.4.2节)A型没有规范的名称,因此对于每一种进口报关的规范名称的要求意味着,(a)在未命名的包类型不能进口,和(b)的静态成员无法导入未命名包中的类型 因此,§7.5.1,§7.5.2,§7.5.3和§7.5.4都要求在未命名的包中导入类型(或其静态成员)的任何尝试都存在编译时错误.