本記事では、StringBuiderを使用した際に発生したエラーである
The method append(String) is undefined for the type StringBuilder
についての原因、及び解決方法を紹介します。
StringBuiderとは
文字列を連続して連結することを得意としたクラスです。
java.langパッケージに含まれています。
java.langパッケージは、頻繁に使われるためimportしなくても自動でimportしてくれます。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/StringBuilder.html
エラーとなったソースコード
The method append(String) is undefined for the type StringBuilder
と怒られたソースコードの例となります。
public class StringBuilder{
public static void main(String[] args){
StringBuilder sb = new StringBuilder();
sb.append("Hello");
}
}
原因
The method append(String) is undefined for the type StringBuilderを翻訳すると
「appendメソッドは、StringBuiderクラスで定義されていません」という意味になります。
あれ、StringBuiderには、appendメソッドは確かにあるはずです。
しかし、このソースコードは、StringBuilderというクラスを宣言しています。
したがって、3行目であるStringBuilder sb = new StringBuilder();のStringBuiderは、java.lang.StringBuilderではなく、エラーとなったソースコードのStringBuilderで解釈されてしまったことが原因となります。
解決方法
1:クラス名の変更
エラーとなったソースコードのStringBuilderのクラス名を変更することで、このエラーは解消されます。
public class StringBuilderTest{
public static void main(String[] args){
StringBuilder sb = new StringBuilder();
sb.append("Hello");
}
}
2:java.lang.StringBuilderと明示する
3行目であるStringBuilder sb = new StringBuilder();のStringBuiderをjava.lang.StringBuilderと明示することで、エラーを解消できます。
public class StringBuilder{
public static void main(String[] args){
java.lang.StringBuilder sb = new java.lang.StringBuilder();
sb.append("Hello");
}
}
しかし、同名クラスがあると後先混乱を招くことは容易に想像できるため、クラス名を変更することが賢明であると考えられます。
まとめ
The method append(String) is undefined for the type StringBuilder
についての原因、及び解決方法を紹介しました。
StringBuilderに限らず、他のAPIを使う際、同名クラスを宣言すると同様なエラーとなります。
クラス名のつけ方に注意しましょう。