- PR -

importの記述について

投票結果総投票数:143
一つずつ 92 64.34%
*でひっくるめて 49 34.27%
その他 2 1.40%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
米山@クロノス
大ベテラン
会議室デビュー日: 2003/06/10
投稿数: 103
お住まい・勤務地: 大阪市淀川区西中島4-13-22 新大阪淀川ビル5F
投稿日時: 2004-01-13 17:17
こんにちは。米山@クロノスです。

現場の開発標準に依存すると思いますが、個人的には「*」を使用した書き方でもいいと思います。
「「*」を使用してはいけない」という理由に「どのクラスをimportしているのかわかりやすくするため」というのがありますが、あまり意味がないように感じるからです。
ただ、現場ではこういった意見が多いですね。
他に理由ってありますか?

# maruさんやukさんがおっしゃるように「メモリを食うから」というのは全く的外れですよね。
# importはあくまでもクラスの「完全修飾名」を補完するための仕組みですから。

[ メッセージ編集済み 編集者: 米山@クロノス 編集日時 2004-01-13 17:23 ]
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-01-13 17:28
unibon です。こんにちわ。

ちなみにつぎの3つのコードは同一の(1バイトの違いもない)クラスファイルになります。

コード:
import java.util.Vector;

public class Import {

    public void foo() {
        Vector vector = new Vector();
    }
}


コード:
import java.util.*;

public class Import {

    public void foo() {
        Vector vector = new Vector();
    }
}


コード:
//import java.util.Vector;

public class Import {

    public void foo() {
        java.util.Vector vector = new java.util.Vector();
    }
}


これらから考えて、まず、実行時には害はまったくないわけです。コンパイル時だけの問題です。
で、どっちが良いかですが、例としては java.awt.List と java.util.List の衝突がありがちです。たとえば、
http://java-house.jp/ml/archive/j-h-b/024482.html
などです。
しかし、コンパイル時にエラーになって気づくのならば、そのときに直せばそれで良いように思います。怖いのは、コンパイルエラーにならずに実行時の挙動だけが異なる、というのはいやらしいですが、そういう意地悪なクラス(メソッドのシグネチャが既存のクラスと同じクラス)を作ればそういうことにも陥りますが、悪意がなければまずそういうことは起きないはずです。
私は * 派なのですが、エディタでソースコードを見るときに、長ったらしいコメントや import 文がずらずら先頭にあるのが邪魔で嫌に思います。スクロールせずにいきなりフィールドが見えると嬉しいです。ただ、こういうのはツールに依存した話ですから、ツールを改良できるならば、import は一切使わずに、常に出現するクラスにはパッケージを明記して書く(上記コードの3番目の例のように)して、エディタがそれを非表示にできるようなモードを持つ、のが良いかもしれません。
C'zka
ベテラン
会議室デビュー日: 2003/09/04
投稿数: 64
投稿日時: 2004-01-13 17:30
皆様、突っ込みありがとうございます(苦笑

メモリに関しては、本当に何も知らない状態で聞かされたので、
今の今まで勘違いしてきました^^;
結局のところ、*で記述しても問題がないのであればどっちでも問題ないってところですね。
import→引き入れる→記述したもの全部いれるっていう風に考えてたんで。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-01-13 17:42
引用:

unibonさんの書き込み (2004-01-13 17:28) より:
で、どっちが良いかですが、例としては java.awt.List と java.util.List の衝突がありがちです。たとえば、
http://java-house.jp/ml/archive/j-h-b/024482.html
などです。
しかし、コンパイル時にエラーになって気づくのならば、そのときに直せばそれで良いように思います。怖いのは、コンパイルエラーにならずに実行時の挙動だけが異なる、というのはいやらしいですが、そういう意地悪なクラス(メソッドのシグネチャが既存のクラスと同じクラス)を作ればそういうことにも陥りますが、悪意がなければまずそういうことは起きないはずです。
しれません。


シグネチャがまったく同じでもクラス定義の衝突が起これば同様のコンパイルエラーになる
はずですので、杞憂だと思いますが。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-01-14 11:09
unibon です。こんにちわ。

引用:

ukさんの書き込み (2004-01-13 17:42) より:
シグネチャがまったく同じでもクラス定義の衝突が起これば同様のコンパイルエラーになる
はずですので、杞憂だと思いますが。


そうでした。ご指摘のとおりです。
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-01-14 12:39
僕はimport文は1つづつ書きます。

理由としては個人的好みも大きいのですが、プロジェクトによっては、
 「そのクラスが依存しているクラスの一覧を納品せよ」
なんてことを言われてクラス間の依存関係一覧(当然、膨大なものになります)を
作成する事が少なからずありますから。
# 無意味な資料だと思いますけど...

追記
 クラス間の依存関係一覧を作成する際に、import文をgrepして作成したりします。
 Eclipseのimport文編集に助けられていますが、同じパッケージのものは
 import文が生成されないので...そこだけは手作業ですね。


[ メッセージ編集済み 編集者: YOU@IT 編集日時 2004-01-14 12:41 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-01-14 14:33
引用:

YOU@ITさんの書き込み (2004-01-14 12:39) より:
理由としては個人的好みも大きいのですが、プロジェクトによっては、
 「そのクラスが依存しているクラスの一覧を納品せよ」
なんてことを言われてクラス間の依存関係一覧(当然、膨大なものになります)を
作成する事が少なからずありますから。


Javadocじゃだめなんですか? まあ方向が逆ですけど。
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-01-14 21:17
引用:

ukさんの書き込み (2004-01-14 14:33) より:
Javadocじゃだめなんですか? まあ方向が逆ですけど。



駄目らしいんです。
Excelの表に一覧にまとめてほしい、と言うのが多いです。
# Javaに詳しくないユーザ・管理者からするとJavaDocはあまり
# まともなドキュメントとして認識してもらえないです。

スキルアップ/キャリアアップ(JOB@IT)