java - 据说通配符可以导入包中的所有类。 "It doesn' t import child packages, fields, or methods."这是什么意思?

标签 java java-8

Sybex 一书中,OCA Oracle Certified Associate Java SE 8 Programmer I - Study Guide,第 10 页> 第 1 章规定如下:

The * is a wildcard that matches all classes in the package. Every class in the java.util package is available to this program when Java compiles it. It doesn’t import child packages, fields, or methods; it imports only classes. (Okay, it’s only classes for now, but there’s a special type of import called the “static import” that imports other types. You’ll learn more about that in Chapter 4.)

这是我天真的理解,因为一个类包含成员(字段和方法),这意味着它们也被导入了。然而,根据本书作者的说法,情况似乎更值得警惕。

如果您正在导入一个类,而您无权访问该类的成员,那么导入该类的意义何在?

最佳答案

what is the point of importing that class?

假设您没有在 java.util 中导入类。如果你想创建一个 Map 你输入:

java.util.Map<String, Integer> myMap = new java.util.HashMap<>();

如果您像 import java.util.*; 一样导入该包中的类:

Map<String, Integer> myMap = new HashMap<>();

If you are importing a class, and you don't have access to the members of that class

导入与访问无关,它们都是关于可读性和便利性的。您不必键入那么多内容,第二个声明的可读性更高,但您可以在这两种情况下使用 myMap 的相同方法。


书中提到的static import(来自doc):

The static import declaration is analogous to the normal import declaration. Where the normal import declaration imports classes from packages, allowing them to be used without package qualification, the static import declaration imports static members from classes, allowing them to be used without class qualification.

静态导入的一个很好的例子是在单元测试中使用 Mockito。在没有任何导入的情况下,您可以验证一些行为,例如:

org.mockito.Mockito.verify(mock, org.mockito.Mockito.never()).someMethod();

如果你使用普通的 import import org.mockito.Mockito;:

Mockito.verify(mock, Mockito.never()).someMethod();

并使用 static import import static org.mockito.Mockito.*; 你可以输入

verify(mock, never()).someMethod();

这里可以使用 verifynever static 方法,即使不指定它们的类 (Mockito)。

关于java - 据说通配符可以导入包中的所有类。 "It doesn' t import child packages, fields, or methods."这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42599810/

相关文章:

java - 这些箭头在 Eclipse Kepler 中意味着什么?

java - java如何区分Lambda中的Callable和Runnable?

java - 类型变量、方法内联和 "Bad return type in lambda expression"

java - ArrayList 删除方法不起作用?

java - 如果流包含多个逗号分隔值,则拆分流

java 8,CompletableFuture

Java 8 lambda 表达式 : Summing up method return values in a for each call for List/Set and Iterable

java - Designer 中奇怪的 GWT 异常

java - IntelliJ : How to autocomple AND import statically Collectors. 列表()

java - 如何使用 applicationContext beans 填充可变参数构造函数?