【问题标题】:How do wildcards in Java import work?Java 导入中的通配符如何工作?
【发布时间】:2012-04-25 11:36:15
【问题描述】:

我注意到我的imports 出现了一些意想不到的结果,我希望了解实际情况。我从以下开始:

import java.util.*;
import java.io.*;
import java.nio.*;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption.*;
import java.nio.file.Paths;

然后发现ArrayListListIterator 不行……所以我加了

import java.util.ArrayList;
import java.util.ListIterator;

一切正常。

我会假设java.util.* 也会导入ArrayListListIterator。为什么没有呢?

我倾向于对我的类/方法/变量名称过于冗长,而且我在程序的其余部分中找不到任何与保留字接近的内容。

我在文档中找不到任何说明为什么会发生这种情况的内容,而且关于 Stack 的大部分讨论都是关于使用 * 与显式编码导入的优化。

任何人都知道我还能看什么来了解这种行为?

【问题讨论】:

  • “没用”是什么意思?你能展示一个简短但完整的程序来演示这个问题吗?
  • 我不明白你的问题
  • 创建一个可以演示问题的最小示例。不要使用您现有的大规模课程。

标签: java syntax import


【解决方案1】:

import java.util.* 肯定 导入 java.util.ArrayList 以及该包中的所有其他内容。请注意,没有子包的概念,因此它不会从java.util.xjava.util.y 导入任何内容,但您的问题似乎并非如此。

如果代码不起作用,您的代码肯定有其他问题,导入语句的行为肯定与您描述的一样。

【讨论】:

  • 这个答案在技术上是不正确的。如果有另一个带有通配符导入的包也包含一个名为 ArrayList 的类,则 noither 类被导入,如果您使用类型 ArrayList,您将收到编译错误,原因是模棱两可的名字。您可以在实践中尝试使用 import java.awt.*; import java.util.*;,因为这两个包都包含一个名为 List 的类型。
【解决方案2】:

我在eclipse中试过了。

import java.util.*;

这两个类都不需要再次导入。

import java.util.ArrayList;
import java.util.ListIterator;

因为通配符 * 表示导入所有子类和包(记住不是包子类)

如果你导入

import java.util.*;

我将导入 java.util.jar 包但不导入 jar 子类 :)

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2014-12-01
    • 2012-09-19
    • 2018-01-25
    • 2013-06-03
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多