当前位置: 首页 > 面试题库 >

递归导入Java

宿鹏程
2023-03-14
问题内容

我是Java开发的新手。我有一个关于Java递归导入的快速问题。

假设包“ pkg”包含以下内容

  • A级
  • 程序包B(依次包含B1类)
  • 程序包C(依次包含C1类)

如果使用import pkg.*为什么我不允许从包“ B”和“ C”中导入类?

我想了解Java不允许我进行递归导入的背后原理。


问题答案:

您的问题措辞不好,因为如果您愿意import pkg.*,那么您当然可以从包pkg.B和中导入类pkg.C。也就是说,这样做非常好:

import pkg.*;
import pkg.B.*;
import pkg.C.*;

但是我假设您真正要问的是为什么,如果您import pkg.*没有自动导入在的子包中声明的类型pkg。要回答这个问题,最好转向Java语言规范:

程序包的分层命名结构旨在方便以常规方式组织相关程序包,但除禁止具有与顶级类型具有相同简单名称的子程序包的禁止包之外,其本身没有其他意义(第7.6节)在该包中声明。

例如,在一个名为的软件包oliver和另一个名为的oliver.twist软件包之间,或在名为evelyn.wood和的软件包之间没有特殊的访问关系evelyn.waugh。也就是说,与其他任何程序包中的代码相比,名为程序包中的代码oliver.twist无法更好地访问在程序包中声明的类型oliver

换句话说,当您import pkg.*导入时,您将导入名称为的包中包含的编译单元定义的所有顶级 类型pkg,但 不会
导入的任何子包pkg(例如pkg.Bpkg.C)。



 类似资料:
  • 到目前为止,我们只学习了C++的一个子集,但是你可能有兴趣知道,这个子集可以算作一个完整的编程语言,任何可计算的事物都可以用该子集表达。任何现有的程序都能通过我们学过的这些仅有的语言特征来重写(实际上,我们还需要一些控制键盘、鼠标、硬盘等设备的命令,就这些了)。 证明这个论断并不是个简单的练习,最早由阿兰图灵完成,他是最早的计算机科学家之一(很多人可能争辩说他是数学家,但是很多早期的计算机科学家都

  • 我对函数式编程很陌生,尤其是下面使用的Scheme。我正在尝试使以下函数是递归的,尾递归的。基本上,该函数的作用是对两个字符串的对齐方式进行评分。当给定两个字符串作为输入时,它会比较每个“列”字符,并根据在称为 scorer 的函数中实现的评分方案(由下面的代码中的函数调用)来累积该对齐的分数。 我有一个想法,用一个帮助函数来累积分数,但我不太确定如何去做,因此我该如何让下面的函数尾递归呢?

  • 5.2. 递归 函数可以是递归的,这意味着函数可以直接或间接的调用自身。对许多问题而言,递归是一种强有力的技术,例如处理递归的数据结构。在4.4节,我们通过遍历二叉树来实现简单的插入排序,在本章节,我们再次使用它来处理HTML文件。 下文的示例代码使用了非标准包 golang.org/x/net/html ,解析HTML。golang.org/x/... 目录下存储了一些由Go团队设计、维护,对网

  • 递归允许函数调用自身。 固定的代码步骤一次又一次地执行新值。 我们还必须设置标准来决定递归调用何时结束。 在下面的例子中,我们看到了二进制搜索的递归方法。 我们采用排序列表并将其索引范围作为递归函数的输入。 使用递归进行二进制搜索 我们使用python实现二进制搜索算法,如下所示。 我们使用一个有序的项目列表,并设计一个递归函数,以带有开始和结束索引作为输入的列表。 然后二进制搜索函数调用自己直到

  • 递归过程就是自称过程。 有两种递归:直接和间接。 在直接递归中,过程调用自身并在间接递归中,第一个过程调用第二个过程,该过程又调用第一个过程。 可以在许多数学算法中观察到递归。 例如,考虑计算数字的阶乘的情况。 一个数的因子由等式给出 - Fact (n) = n * fact (n-1) for n > 0 例如:5的阶乘是1 x 2 x 3 x 4 x 5 = 5 x阶乘4,这可以是显示递归

  • 我们在前面的主题中看到了recur语句,而'for'循环有点像循环, recur是Clojure中的一个真正的循环。 如果你有编程背景,你可能听说过尾递归,这是函数式语言的一个主要特性。 这种复现特殊形式是实现尾递归的形式。 正如单词“tail recursion”所示,必须在尾部位置调用recur。 换句话说,复发必须是最后评估的东西。 最简单的recur语句示例在'for'循环中使用。 在以下