【问题标题】:Unqualified name in JavaJava中的不合格名称
【发布时间】:2015-01-15 15:14:42
【问题描述】:

我们编程课上的老师在谈论“不合格的名字”,但我想知道它们到底是什么。

我怀疑方法名之类的东西是不合格的,但我不确定。

有谁能给我解释一下吗?我需要知道这一点,因为我需要解释 Java 以何种方式看起来是一个不合格的名称。

【问题讨论】:

  • 这是一个很好的 Stack Overflow 问题:答案很简单。仅仅因为您可以在其他地方找到答案(在我看来),并不意味着 SO 不应该有答案。我没有看它是否是重复的。
  • @Thomas 太糟糕了,它显示了零研究工作。这是一些人投反对票的“强烈”理由。
  • 我和你在一起;然而,另一条评论(我标记了;上面的评论是针对它写的),很刻薄,没有建设性,并且给了 SO 一个不好的代表。

标签: java qualified-name unqualified-name


【解决方案1】:

限定名称是具有完整路径的名称,例如:

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

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

【讨论】:

    【解决方案2】:

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

    示例:java.util.ArrayList 是完全限定名称。

    不合格的名称只是没有包信息的类、接口、枚举或字段。

    示例:ArrayList

    【讨论】:

      【解决方案3】:

      例如 com.yourcompany.domain.Person 是完全限定的类名,Person 是类名或非限定类名。

      【讨论】:

        【解决方案4】:

        合格名称: org.springframework.jdbc.core.JdbcTemplate
        它有包名org.springframework.jdbc.core然后是类名JdbcTemplate

        非限定名称: JdbcTemplate 只是类名没有包名。

        例如:限定名是你家的完整地址,非限定名只是你家的名字。

        【讨论】:

          【解决方案5】:

          在对话中添加一个尚未提及的文章(虽然没有直接询问,但我认为这是对话的有用附录):

          Java 中的所有名称都需要限定;但是,有些对于 Java 的操作是如此不可或缺,以至于它们被假定 - 或默认 - 在您正在编码的“类中”(或 imported)。 Liskov (2000) 给出了一个很好的例子:java.lang - 包含String 等对象的类。

          您经常会在 Java 中看到不合格的名称。这通常与类或方法相对于您尝试访问它的类(同一个包)的位置有关。上面,其他发帖人都提到了Java中packages的概念。

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

          【讨论】:

          • 在评估带有预定义枚举常量的 switch() 结构的情况时,也会使用非限定名称。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-15
          • 1970-01-01
          • 1970-01-01
          • 2020-11-09
          • 2016-03-04
          相关资源
          最近更新 更多