2015-01-15 20 views
6

我们编程课程中的老师正在谈论“不合格的名称”,但我想知道他们的真实身份。Java中的非限定名称

我怀疑像方法名称这样的东西是不合格的,但我不确定。

有没有人可以向我解释这个?我需要知道这一点,因为我需要解释Java以何种方式看起来不合格。

+0

这是一个很好的堆栈溢出问题:它很简单,一个明确的答案。仅仅因为你可以在别处找到答案(在我看来)并不意味着SO不应该有答案。我没有看到它是否是重复的。 – Thomas 2015-01-15 16:32:15

+0

@Thomas太糟糕了,它显示零研究工作。对于一些人来说,这是一个“强有力”的原因。 – Tom 2015-01-15 20:37:51

+0

我与你同在;然而,另一个评论(我标记的,上面的评论写在这个评论上)是明显的意思,而不是建设性的,并且给了一个糟糕的代表。 – Thomas 2015-01-16 02:06:09

回答

15

一名合格的名称是一个具有完整路径,例如:

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 
    } 
} 

如果您使用两个同名类,至少有一个避免限定 - 您可以导入一个,但导入两者都会产生歧义。

5

Java中的限定名称包括类,接口,枚举或字段源自的特定包。

例如:java.util.ArrayList是一个完全限定的名称。

一个非限定名称就是没有包信息的类,接口,枚举或字段。

实施例:ArrayList

+4

我们在出生时必须是双胞胎分开的...... – Bohemian 2015-01-15 15:19:06

2

例如com.yourcompany.domain.Person是完全合格的类名称和Person是类名的或不合格的类名。

1

限定名称:org.springframework.jdbc.core.JdbcTemplate
它包名org.springframework.jdbc.core那么类名JdbcTemplate

不合格名称:JdbcTemplate 它是不是有包名唯一的类名。

例如:合格的名称是您家的整个地址,而不合格的名称只是您的家庭名称。

0

添加到对话中尚未提及,但一块(而不是直接问,但我相信这是一个有益的adendum的谈话):

Java中的所有名称要求的资格;然而,有些与Java的操作是如此不可分割,以至于他们被假设 - 或者默认 - 是在编程中的“在课堂上”(或import ed)。 Liskov(2000)给出了一个很好的例子:java.lang - 包含诸如String之类的对象的类。

您经常会在Java中看到非限定名称。这通常与相对于您尝试访问它的类的类或方法的位置(相同的包)有关。以上,其他海报在Java中提到了packages的概念。

软件包允许您解决 - 或者,也许更好地防止 - 命名冲突。程序中的每个软件包都可以复制另一个软件包的类名等。在这种情况下,完全限定名称用于访问正确的类(如其他答案中所见)。您还可以导入一个包以避免使用其完全限定的名称;但是,如果两个导​​入的类包含命名冲突,那么您将遇到一些问题。

+0

当评估具有预定义枚举常量的switch()结构的情况时,也使用非限定名称。 – 2015-12-24 17:30:21