インポート文の問題の処理
この最終ステップでは、不足している、または間違ったインポート文が原因で発生する「cannot access class(クラスにアクセスできません)」エラーを特定し、解決する方法を学びます。
Java におけるインポート文の理解
インポート文は、Java コンパイラに、コードで使用されているクラスを見つける場所を指示します。他のパッケージのクラスをインポートせずに使用した場合、または誤ってインポートした場合は、「cannot access class(クラスにアクセスできません)」エラーが発生します。
インポート文なしでクラスを作成する
適切なインポート文なしで、他のパッケージのクラスを使用するクラスを作成しましょう。src/main/java/com/example/utilディレクトリに、次の内容でCalculator.javaという名前の新しいファイルを作成します。
package com.example.util;
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
次に、Calculatorクラスをインポートせずに使用するsrc/main/java/com/example/appディレクトリに、CalculatorDemo.javaという名前の新しいファイルを作成します。
package com.example.app;
// Missing import for Calculator class
public class CalculatorDemo {
public static void main(String[] args) {
Calculator calculator = new Calculator(); // Error: Cannot access Calculator
int sum = calculator.add(5, 3);
System.out.println("5 + 3 = " + sum);
int difference = calculator.subtract(10, 4);
System.out.println("10 - 4 = " + difference);
}
}
コンパイルとエラーの観察
Java プロジェクトをコンパイルしてみましょう。
./compile.sh
次のようなエラーメッセージが表示されるはずです。
src/main/java/com/example/app/CalculatorDemo.java:6: error: cannot find symbol
Calculator calculator = new Calculator();
^
symbol: class Calculator
location: class CalculatorDemo
src/main/java/com/example/app/CalculatorDemo.java:6: error: cannot find symbol
Calculator calculator = new Calculator();
^
symbol: class Calculator
location: class CalculatorDemo
2 errors
このエラーは、CalculatorDemoクラスがCalculatorクラスをインポートせずに使用しようとしているために発生します。
インポート文の問題の修正
この問題を解決するには、CalculatorDemo.javaファイルに適切なインポート文を追加します。
package com.example.app;
import com.example.util.Calculator; // Added import statement
public class CalculatorDemo {
public static void main(String[] args) {
Calculator calculator = new Calculator();
int sum = calculator.add(5, 3);
System.out.println("5 + 3 = " + sum);
int difference = calculator.subtract(10, 4);
System.out.println("10 - 4 = " + difference);
}
}
再コンパイルとソリューションのテスト
次に、Java プロジェクトを再コンパイルします。
./compile.sh
コンパイルは、エラーなしで成功するはずです。CalculatorDemoクラスを実行する簡単なスクリプトを作成しましょう。
echo "java -cp bin com.example.app.CalculatorDemo" > ./runcalc.sh
chmod +x ./runcalc.sh
次に、CalculatorDemoクラスを実行します。
./runcalc.sh
次のような出力が表示されるはずです。
5 + 3 = 8
10 - 4 = 6
これは、正しいインポート文を追加したため、CalculatorDemoクラスがCalculatorクラスにアクセスできるようになったことを確認しています。
ソリューションの理解
「cannot access class(クラスにアクセスできません)」エラーが発生した場合は、以下を確認してください。
- 使用しようとしているクラスをインポートしたこと
- インポート文が正しいパッケージを指していること
- インポートしようとしているクラスが public であること(ステップ 2 で学習しました)
Java には、クラスをインポートする方法が 2 つあります。
- 単一型インポート:
import com.example.util.Calculator;
- オンデマンドインポート:
import com.example.util.*;
単一型インポートは、どのクラスが使用されているかを明確にするため、一般的に推奨されます。オンデマンドインポート(ワイルドカード*を使用)は、パッケージ内のすべてのクラスをインポートします。これは、同じ名前のクラスが異なるパッケージに存在する場合、名前の競合につながる可能性があります。
インポート文が正しいことを確認することで、Java プロジェクトで多くの「cannot access class(クラスにアクセスできません)」エラーを回避できます。