原因 4: 不正確なメソッドシグネチャ
メソッドを呼び出すとき、コンパイラはその名前と正しい数と型の引数(メソッドシグネチャ (method signature))を持つメソッドが存在するかどうかをチェックします。呼び出しに一致するメソッドが見つからない場合は、「cannot find symbol」エラーが発生します。
例を作成してみましょう。
/home/labex/project ディレクトリに IncorrectMethodCallExample.java という名前の新しい Java ファイルを作成します。
touch /home/labex/project/IncorrectMethodCallExample.java
WebIDE エディタで /home/labex/project/IncorrectMethodCallExample.java を開き、次のコードを追加します。
public class IncorrectMethodCallExample {
public static void greet(String name) {
System.out.println("Hello, " + name);
}
public static void main(String[] args) {
greet("Alice", 25); // Calling greet with incorrect arguments
}
}
Ctrl + S を押すか、File > Save を使用してファイルを保存します。
コードをコンパイルします。
javac /home/labex/project/IncorrectMethodCallExample.java
次のようなエラーメッセージが表示されます。
/home/labex/project/IncorrectMethodCallExample.java:8: error: cannot find symbol
greet("Alice", 25); // Calling greet with incorrect arguments
^
symbol: method greet(String,int)
location: class IncorrectMethodCallExample
1 error
エラーメッセージは、コンパイラが String と int を引数として受け入れる greet という名前のメソッドを見つけることができないことを示しています。 greet メソッドがあることは認識していますが、シグネチャ greet(String,int) は定義された greet(String) メソッドと一致しません。
これを修正するには、メソッド呼び出しがメソッドのシグネチャと一致するようにします。
/home/labex/project/IncorrectMethodCallExample.java を再度開き、main メソッドを修正します。
public class IncorrectMethodCallExample {
public static void greet(String name) {
System.out.println("Hello, " + name);
}
public static void main(String[] args) {
greet("Alice"); // Calling greet with the correct argument
}
}
Ctrl + S を押すか、File > Save を使用してファイルを保存します。
コードを再度コンパイルします。
javac /home/labex/project/IncorrectMethodCallExample.java
コンパイルは正常に完了するはずです。
コードを実行します。
java IncorrectMethodCallExample
出力は次のようになります。
Hello, Alice
これは、メソッド呼び出しの引数の数と型が、メソッドシグネチャ (method signature) に関連する「cannot find symbol」エラーを回避するために、メソッドの定義と一致する必要があることを示しています。