2012-01-23 11 views
4

さまざまなJDKクラスのソースを参照しながら、クラスがjava.io.Serializableインターフェイスを実装したときに、通常は完全な名前で参照され、インポートを使用しないことがわかりました。JDKクラスで、Serializableが完全修飾名で宣言されているのはなぜですか?

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

具体的な理由はありますか?これは古いJDK 1.0の非推奨クラスsunw.io.Serializableの存在と関係していますか?

+1

あなたは 'sunw.io.Serializable'で正しいと思っていますので、作者は' java.io.Serializable'を意味することを明確にしたかったのです。例えば、 'Cloneable'はJDKに同じ名前の相手を持っていないので、無意味です。 –

+3

そのコードの著者に質問してください。私の経験では、Serializableの完全修飾名を使用するのは普通のことではありません。 –

+2

@Steve Kuo:あなたはJosh Blochに電子メールを書くべきだと言っていますか? :) – Natix

答えて

-2

これは一般的には、すべてのものを自由にインポートするには貧弱な形式とみなされます。完全修飾型名(java.io.Serializableおよび例外を含む)を使用すると、インポートの必要性が減り、それらの型がどこから来たのかを確認できます。

+4

誰もが、特によく知られているJDKクラスのすべてをインポートしない場合、任意の引数または例を与えることができますか?私の心の中には、java.sql.Dateのようなクラスがあり、標準の 'java.util.Date'との混同を明示的に避けたいクラスがあります。 (静的なインポートについては言及していませんが、実際に誤用されると混乱を招く可能性があります)。 – Natix

関連する問題