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

为什么在Java导入语句不好的情况下使用通配符?

陈宜修
2023-03-14
问题内容

使用单个语句像

import java.awt.*;

而不是导入一堆单独的类

import java.awt.Panel;
import java.awt.Graphics;
import java.awt.Canvas;
...

在import语句中使用通配符有什么问题?


问题答案:

唯一的问题是,它会使你的本地名称空间混乱。例如,假设你正在编写一个Swing应用程序,因此需要它java.awt.Event,并且还与该公司的日历系统(具有)交互com.mycompany.calendar.Event。如果你同时使用通配符方法导入这两种情况,则会发生以下三种情况之一:

  1. java.awt.Event和之间存在直接的命名冲突com.mycompany.calendar.Event,因此甚至无法编译。
  2. 实际上,你实际上只能导入一个(两个导入中只有一个导入.*),但这是错误的,并且你很难弄清楚为什么代码声称类型是错误的。
  3. 当你编译代码时,没有com.mycompany.calendar.Event,但是当他们以后添加代码时,你先前有效的代码突然停止编译。

显式列出所有导入的优点是,我可以一目了然地告诉你要使用哪个类,这使阅读代码变得更加容易。如果你只是快速地一次性完成,则没有任何明显的错误,但是以后的维护人员将感谢你的清晰说明。



 类似资料:
  • 问题内容: 在Java中,是否可以编写一个switch语句,其中每种情况都包含多个值?例如(尽管以下代码显然不起作用): 我认为这可以在Objective C中完成,Java中是否有类似的东西?或者我应该只使用,语句呢? 问题答案: Java没有这种东西。为什么不执行以下操作?

  • 问题内容: 我需要创建一个使用12个参数的存储过程,并使用此参数的不同组合来过滤查询。所有12个参数都不是强制性的,好像我传递3或5或12个参数取决于用户输入的搜索输入。 我可以使用动态SQL查询或“ Case where”语句创建2种方法。这些查询的示例如下: 动态查询 DECLARE @condition VARCHAR(MAX)=’‘ Declare @var1 varchar(10) De

  • 问题内容: 我正在使用准备好的语句来执行mysql数据库查询。我想实现基于各种关键字的搜索功能。 为此,我需要使用关键字,这一点我知道很多。而且我之前也使用过预处理语句,但是我不知道如何使用它,因为从以下代码中,我将在哪里添加? 我可以直接在或类似的东西中使用它吗?我在网络上看到很多帖子,但在任何地方都没有好的答案。 问题答案: 你需要在值本身中而不是在准备好的语句SQL字符串中进行设置。 因此,

  • 我一直在玩流,然后我注意到当我执行以下操作时,它不会在控制台中产生输出: 我认为这是因为是一个非终止流方法,应该使用而不是来终止流并生成结果: 然而,是否有一种方法可以‘提前’终止流,使用一个自定义的终止方法(函数接口),它除了终止流之外什么都不做?..有没有一个适当的方法来利用Java现有的东西来做到这一点? 我知道我可以这样做: 但那感觉很浪费。

  • 问题内容: 建议不要中使用。 可以分享原因,以便下次避免这样做吗? 问题答案: 因为它将很多东西放到你的命名空间中(可能会遮盖以前导入的其他对象,你对此一无所知)。 因为你不完全知道要导入的内容,而且不容易找到从哪个模块导入的特定内容(可读性)。 因为你不能使用像静态检测代码中的错误之类的出色工具。

  • 问题内容: 我想知道Java(或更普遍的是:在编程中)的一些情况,在布尔表达式中首选使用无条件()而不是有条件版本()。 我知道它们是如何工作的,但是我想不出使用单曲值得的情况。 问题答案: 我发现在现实生活中的情况下,表达的双方都真的很便宜,所以它剃掉了一两纳秒避免分支,使用无条件代替。(不过,这些都是极高性能的数学实用程序;我几乎永远不会在其他代码中使用它,并且如果没有详尽的基准测试来证明它更