Import¶
概要¶
適切にインポートを行っている際に獲得できる実績です.
不必要なインポートを行ったり, static なインポートを行わないことによってプログラムの依存性が減少し,
変更を行いやすくなります.
| タイトル |
|---|
| Reliance upon others |
この実績には,以下の3つのルールが含まれます:
- AvoidStarImports
- AvoidStaticImport
- RedundantImport
AvoidStarImports¶
* を用いた import 文がないかをチェックします.
パッケージ等から * を用いてすべてのクラスをインポートすると,依存が強くなり,名前が衝突したり将来の変更に対応しにくくなったりします.
コード例¶
import java.util.*; // !!! List しか使用していない場合は import java.util.List; にしましょう
public class Foo {
private void bar() {
List list = new List()<String>;
doSomething(list);
return;
}
}
このルールのチェックには,Checkstyleの AvoidStarImport を用いています.
AvoidStaticImport¶
static import を用いたインポートを行っていないかチェックします.
コード例¶
import static java.lang.Math.max; // !!! static を用いたインポートを行っています
public class StaticClass {
public staticClass(){
int num1 = 10;
int num2 = 20;
int nmax = max(num1, num2);
return max;
}
}
このルールのチェックには,Checkstyleの AvoidStaticImport を用いています.
注釈
Javaには, static インポート という機能があります.例えば上のコード例で,通常のインポートを行って記述を行うと,以下のようになります:
import java.lang.Math.max; // 通常のインポート
public class StaticClass {
public staticClass(){
int num1 = 10;
int num2 = 20;
int nmax = Math.max(num1, num2); // クラスを指定する
return max;
}
}
static インポートを行うことによって,クラスの指定が必要なくなるというメリットがあります.しかし,static を用いたインポートを行うと,名前が衝突しやすくなります.
以下引用:
staticインポートを使いすぎると、インポートしたすべてのstaticメンバーでプログラムの名前空間が煩雑になるため、
プログラムが判読不可能になり、保守不可能になる可能性があります。
プログラムのコードを読んだ人は(プログラムの作成者が数か月後に読んだ場合でも)、
staticメンバーがどのクラスに属していたのか理解できないでしょう。
RedundantImport¶
冗長なインポートを行っていないかチェックします.冗長なインポートとは,以下のことを指します:
- 重複した
import文がある,すなわち同じクラスを2回以上インポートしているjava.langパッケージからインポートを行っている- 現在のパッケージと同じパッケージからインポートを行っている
コード例¶
package enshud.s1.lexer;
import java.io.IOException;
import java.lang.String; // !!! `java.lang`からのインポートは必要ありません(2番目に該当)
import java.io.IOException; // !!! 同一のクラスをインポートしています(1番目に該当)
import enshud.s1.lexer.Lib; // !!! 現在のパッケージと同じパッケージからインポートを行っています(3番目に該当)
public class Lexer {
public static void main(final String[] args) {
doSomething();
}
}
このルールのチェックには,Checkstyleの RedundantImport を用いています.