为啥在 JDK 类中使用完全限定名称声明 Serializable?

Posted

技术标签:

【中文标题】为啥在 JDK 类中使用完全限定名称声明 Serializable?【英文标题】:Why is Serializable declared with fully qualified name in JDK classes?为什么在 JDK 类中使用完全限定名称声明 Serializable? 【发布时间】:2012-02-17 06:04:45 【问题描述】:

这可能有点无意义的问题,但是在浏览各种JDK类的源代码时,我看到当一个类实现java.io.Serializable接口时,它通常用一个完全限定的名称来引用它,而不是使用导入,比如如:

public class ArrayList<E> extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable

这有什么具体原因吗?这与旧 JDK 1.0 中已弃用的类 sunw.io.Serializable 的存在有任何关系吗?

【问题讨论】:

我相信您对sunw.io.Serializable 的看法是正确的,作者想明确表示他们的意思是java.io.Serializable。例如 Cloneable 在 JDK 中没有同名的对应物,所以它没有意义。 询问该代码的作者。使用 Serializable 的完全限定名称(根据我的经验)是不正常的。 @Steve Kuo:你说我应该给乔什·布洛赫写一封电子邮件? :) 【参考方案1】:

随意导入所有内容通常被认为是一种糟糕的形式。使用完全限定的类型名称(包括java.io.Serializable 和异常),减少了对导入的需求并检查这些类型的来源。

【讨论】:

如果有人不导入所有东西,尤其是众所周知的 JDK 类,你能给出任何论点或例子吗?只有在我看来有意义的情况是 java.sql.Date 之类的类,人们希望明确避免与标准 java.util.Date 混淆。 (我没有提到静态导入,如果滥用它们实际上可能会引起一些混乱。)

以上是关于为啥在 JDK 类中使用完全限定名称声明 Serializable?的主要内容,如果未能解决你的问题,请参考以下文章

PHP之namespace小记

PHP命名空间的三种引用方式:非限定名称限定名称完全限定名称

PHP命名空间的三种引用方式:非限定名称限定名称完全限定名称

成员声明中不允许使用 C++ 限定名称

C ++继承类具有同名成员

如果只有完全限定名称,如何获取 java 类的二进制名称?