【发布时间】:2013-01-25 09:38:44
【问题描述】:
我正在查看其他人的代码,他们使用包名称对其进行编码。
String filename = "";
java.io.PrintWriter writer;
writer = new java.io.PrintWriter(new java.io.FileWriter(filename));
如果没有用包名编码,语法是否等同?既然Java允许,那么用包名编码有什么用吗?
【问题讨论】:
我正在查看其他人的代码,他们使用包名称对其进行编码。
String filename = "";
java.io.PrintWriter writer;
writer = new java.io.PrintWriter(new java.io.FileWriter(filename));
如果没有用包名编码,语法是否等同?既然Java允许,那么用包名编码有什么用吗?
【问题讨论】:
如果:
import 正在使用的类。 (通常是精神错乱。)imported 类,但仍然使用包名,因为我不知道。【讨论】:
imports 对任何人的可读性都要低熟悉 JDK。因此出现了“精神错乱”的评论。
使用fully-qualified names 在语义上与给定的类导入相同。
FQN 的一种可能用法是,如果您需要使用两个具有相同名称但不同的类 包。
import java.util.Date;
Date date = new Date();
java.sql.Date sqlDate = new java.sql.Date(date);
【讨论】:
您可以不使用包名,代码仍然完全相同,您只需从程序顶部的包java.io 导入类:
import java.io.PrintWriter;
import java.io.FileWriter;
String filename = "";
PrintWriter writer;
writer = new PrintWriter(new FileWriter(filename));
【讨论】:
您可以编写包含其包的类名以避免歧义,例如在您的程序中有两个名为 PrintWriter 的类,java.io.PrintWriter 将采用 java.io 中的一个。
即使在“标准”类中也有相当多的重复名称,这并不奇怪 - 例如,日期存在于 java.util 和 java.sql 中,队列存在于 java.util 和 javax.jms 中 - 所以你会遇到这种结构时不时地。
【讨论】: