为啥在 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命名空间的三种引用方式:非限定名称限定名称完全限定名称