当前位置: 首页 > 知识库问答 >
问题:

尝试从类导入嵌套类型

单于飞鸣
2023-03-14

我不明白为什么这样不行。我的顶级类在未命名的包中(目前,我计划稍后设置包)。

我class1.java:

public class Iclass1 {    
    public static class Nested1 {
        // whatever
    }    
}

Iclass2。爪哇:

import Iclass1.*;
public class Iclass2 {
    private Nested1 someMember;
    // etc.
}

在我编译Iclass1之后。java没有错误,编译器在我编译Iclass2时会抱怨。java:“错误:包Iclass1不存在”。

但是JLS说:(7.5.2)

import PackageOrTypeName . * ;

PackageOrTypeName必须是包、类类型、接口类型、枚举类型或注释类型的规范名称(§6.7)。

及:(6.7)

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

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

因此,Iclass1似乎是我试图在导入中使用的类型的规范名称。我做错了什么?

(另外,我现在认为导入静态会更好,但它也不起作用。)


共有3个答案

薛弘壮
2023-03-14

如果要执行导入,则可以在Iclass2中将私有成员声明为private Nested1 someMember ,而不执行Iclass1。Nested1您必须将Iclass1放在一个包中。

将其放入包中后,可以按如下方式导入嵌套成员:

import mypackage.Iclass1.Nested1;
import mypackage.Iclass1.*;
import static mypackage.Iclass1.Nested1;
import static mypackage.Iclass1.*;

无法从默认命名空间/包导入任何内容。

程胤运
2023-03-14

这与java非常不一致,但如果顶级容器类位于默认包中,则似乎无法导入内部类。

如果您将这两个类放在任何包中,导入工作正常。

尝试为这两个类创建一个名为foo的目录,将它们移动到其中,然后添加packagefoo 作为每个文件中的第一行。

哈襦宗
2023-03-14

由于没有软件包,请不要使用导入。

因为JLS§7.5告诉您不要:

未命名包(§7.4.2)中的类型没有规范名称,因此每种导入声明中对规范名称的要求意味着(A)无法导入未命名包中的类型,以及(b)无法导入未命名包中类型的静态成员。因此,§7.5.1、§7.5.2、§7.5.3和§7.5.4都要求在试图将类型(或其静态成员)导入未命名包时出现编译时错误。

 类似资料:
  • 目标 了解如何定义嵌套类和何时适合使用它们 了解使用嵌套类的副作用 了解 new 运算符在嵌套类中的特殊用法 了解如何和何时使用静态内部类和匿名内部类 在何处使用嵌套类 顾名思义,嵌套类(或内部类) 是在一个类中定义的另一个类。 public class EnclosingClass { . . . public class NestedClass { . . . } } 像成

  • 本页包含内容: 嵌套类型实例 嵌套类型的引用 枚举类型常被用于实现特定类或结构体的功能。也能够在有多种变量类型的环境中,方便地定义通用类或结构体来使用,为了实现这种功能,Swift允许你定义嵌套类型,可以在枚举类型、类和结构体中定义支持嵌套的类型。 要在一个类型中嵌套另一个类型,将需要嵌套的类型的定义写在被嵌套类型的区域{}内,而且可以根据需要定义多级嵌套。 嵌套类型实例 下面这个例子定义了一个结

  • 我是新来的。我试图用它来建立自己的网站。我想做的是在父组件中嵌套一个子组件;父组件应该在主页中呈现,子组件嵌套在主页中。下面我举了一个我尝试的例子。 到目前为止,我的方法是 在“childComponent”中创建子组件。js' 这里的问题是“childComponent”在我的React应用程序中永远不可见。我是不是走错了路?有没有我不懂的基本机械原理? 提前感谢!! -- 子组件(childC

  • 问题内容: 我可以做以下事情吗? 问题答案: 香草CSS不可能。但是,您可以使用类似: Sass使CSS再次变得有趣。Sass是CSS3的扩展,添加了嵌套规则,变量,mixins,选择器继承等。使用命令行工具或网络框架插件将其转换为格式良好的标准CSS。 要么 不用构造长的选择器名称来指定继承,在Less中,您可以简单地将选择器嵌套在其他选择器中。这样可以使继承更清晰,样式表更短。 例:

  • 使用Laravel 5.6,我试图从MySQL类别表中显示子类别的子类别。我想传递这个名字,并获得它的所有子类,而不管父类是什么。 类别表 期望结果 return App\Category::where('name','Child-1-P-2'))-