我们编程课程中的老师正在谈论“不合格的名称”,但我想知道他们的真实身份。Java中的非限定名称
我怀疑像方法名称这样的东西是不合格的,但我不确定。
有没有人可以向我解释这个?我需要知道这一点,因为我需要解释Java以何种方式看起来不合格。
我们编程课程中的老师正在谈论“不合格的名称”,但我想知道他们的真实身份。Java中的非限定名称
我怀疑像方法名称这样的东西是不合格的,但我不确定。
有没有人可以向我解释这个?我需要知道这一点,因为我需要解释Java以何种方式看起来不合格。
一名合格的名称是一个具有完整路径,例如:
java.util.ArrayList list;
不合格的名称刚刚过去的一部分:
import java.util.*;
ArrayList list;
术语可广泛应用于和方法了。
所以,如果你可以导入类,为什么你需要使用合格的名称?
当你使用两个类时,你需要它,虽然它们来自不同的包,但它们共享相同的名称。一个典型的例子是从JDK可笑的命名类:
java.sql.Date
顺带延伸
java.util.Date
这是相当常见于需要在两个类的实例的引用,所以你需要编写代码,看起来像:
public void process(java.util.Date fromDate) {
RowSet rows = <run query with fromDate as parameter>
while (rows.nsxt()) {
java.sql.Date date = rows.getDate(1);
// code that needs date
}
}
如果您使用两个同名类,至少有一个避免限定 - 您可以导入一个,但导入两者都会产生歧义。
Java中的限定名称包括类,接口,枚举或字段源自的特定包。
例如:java.util.ArrayList
是一个完全限定的名称。
一个非限定名称就是没有包信息的类,接口,枚举或字段。
实施例:ArrayList
我们在出生时必须是双胞胎分开的...... – Bohemian 2015-01-15 15:19:06
例如com.yourcompany.domain.Person是完全合格的类名称和Person是类名的或不合格的类名。
限定名称:org.springframework.jdbc.core.JdbcTemplate
它包名org.springframework.jdbc.core
那么类名JdbcTemplate
不合格名称:JdbcTemplate
它是不是有包名唯一的类名。
例如:合格的名称是您家的整个地址,而不合格的名称只是您的家庭名称。
添加到对话中尚未提及,但一块(而不是直接问,但我相信这是一个有益的adendum的谈话):
Java中的所有名称要求的资格;然而,有些与Java的操作是如此不可分割,以至于他们被假设 - 或者默认 - 是在编程中的“在课堂上”(或import
ed)。 Liskov(2000)给出了一个很好的例子:java.lang
- 包含诸如String
之类的对象的类。
您经常会在Java中看到非限定名称。这通常与相对于您尝试访问它的类的类或方法的位置(相同的包)有关。以上,其他海报在Java中提到了packages
的概念。
软件包允许您解决 - 或者,也许更好地防止 - 命名冲突。程序中的每个软件包都可以复制另一个软件包的类名等。在这种情况下,完全限定名称用于访问正确的类(如其他答案中所见)。您还可以导入一个包以避免使用其完全限定的名称;但是,如果两个导入的类包含命名冲突,那么您将遇到一些问题。
当评估具有预定义枚举常量的switch()结构的情况时,也使用非限定名称。 – 2015-12-24 17:30:21
这是一个很好的堆栈溢出问题:它很简单,一个明确的答案。仅仅因为你可以在别处找到答案(在我看来)并不意味着SO不应该有答案。我没有看到它是否是重复的。 – Thomas 2015-01-15 16:32:15
@Thomas太糟糕了,它显示零研究工作。对于一些人来说,这是一个“强有力”的原因。 – Tom 2015-01-15 20:37:51
我与你同在;然而,另一个评论(我标记的,上面的评论写在这个评论上)是明显的意思,而不是建设性的,并且给了一个糟糕的代表。 – Thomas 2015-01-16 02:06:09