4

私はまだJavaに慣れていないので、インポートを適切に行う方法を明確にする必要があります。

初め:

import java.awt.*;
import java.swing.*;

* は、「awt」および「swing」ディレクトリの下にあるものを意味すると想定しています。しかし、以前にこれを行っている人を見たことがあります:

import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;

私は何か誤解していますか?それとも、単に冗長性を見つけているのでしょうか?

4

4 に答える 4

4
import javax.awt.*

パッケージ内のすべてのクラスが含まれますが、などjavax.awtの内部にネストされた他のパッケージは含まれません。それを別のインポートとして使用する必要があります。異なる名前のすべてのパッケージを個別に含める必要がありました。javax.awtjavax.awt.event

you を使用import javax.swing.*すると、次のインポートは必要ありません。

import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

それらはswingパッケージの直接の子であるためです。

于 2012-12-18T01:59:56.237 に答える
2

import ステートメントの * は、そのパッケージのすべてが必要であることを示します。一般に、これは良い考えではありません。含めるパッケージのすべてが必要なわけではありません。

実際には、インポートが最適化されているのを見てきました。必要なものをインポートするだけです。Eclipse、Netbeans、IntelliJ などのほとんどの IDE には、それを行うためのオプションがあります。

于 2012-12-18T02:04:04.603 に答える
2

通常、明示的なインポートを使用し、ワイルドカードの使用を避けることをお勧めします。これにより、インポート対象を常に正確に把握できます。ただし、JVM はワイルドカードを使用する場合に必要なクラスのみをインポートするため (サブパッケージからはインポートしない)、効率が低下することはありません (無視できるコンパイルのオーバーヘッドは別として)。

これを行うのは必ずしも冗長ではありませんが、私の意見では少し厄介です:

import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.*;

別のパッケージで別の UnsupportedLookAndFeelException が宣言されている可能性があるため、javax.swing パッケージからのものを必ず含める必要があるため、この場合は明示的にします。前述の最善の策は、必要なインポートを明示的に選択するのに IDE が役立つようにすることです。

于 2012-12-18T02:06:51.067 に答える
2

インポートの最後に * を追加すると (ワイルドカード インポート)、特定のパッケージに含まれるすべてのクラスがインポートされますcom.test.*。一方、たとえばクラスを追加すると、その特定のクラスが具体的にインポートされます。com.test.TestClass

ただし、最初のアプローチを使用する場合は、次のスタック オーバーフロー スレッドで説明されているように、クラスの衝突の可能性に注意する必要があります

そのため、使用するクラスを明示的に伝えることができるため、2 番目のアプローチを好みます。そうすることで、コードが読みやすくなります。

于 2012-12-18T02:06:58.057 に答える