Java コンパイラは、一連の文字列連結を含む式を自動的に変換して、バッファを使用します。Java 1.5 より前は、StringBuffer という 1 つの選択肢しかありませんでした。ただし、すべてのパブリック メソッドを同期するという初期の Java の規則に悩まされていました。Java 1.5 では、新しいバッファ クラス (StringBuilder) が追加されました。これは、同期を削除し、クラスのユーザーがアクセスを適切に同期できるようにするため、より優れています。Java コンパイラが Java 1.5 以降を対象としている場合、StringBuilder が使用されます。1.5 より前のバージョンでは、StringBuffer を使用します。
BlackBerry デバイスは、Java 1.3 に基づく Java-ME を使用するため、StringBuilder クラスは存在しません。あなたの問題は、最新の Java-SE コードを作成していて、それを Java-ME BlackBerry デバイスに展開することを期待していることです。Eclipse を使用している場合は、Java 言語準拠レベルを 1.3 に変更してください。これにより、コンパイラは StringBuffer 参照を適切に生成します。また、ジェネリックを使用すると構文エラーが発生します。これは、BlackBerry の開発では予期されていることです。ジェネリックは取得できません。
コード例:
public class test {
public static String concat(String a, String b) {
return a + b;
}
}
でコンパイルしたときのバイトコードの結果javac -source 1.5 -target 1.5 test.java
public static java.lang.String concat(java.lang.String, java.lang.String);
Code:
0: new #2; //class java/lang/StringBuilder
3: dup
4: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V
7: aload_0
8: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
11: aload_1
12: invokevirtual #4; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
15: invokevirtual #5; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
18: areturn
でコンパイルしたときのバイトコードの結果javac -source 1.3 -target 1.3 test.java
public static java.lang.String concat(java.lang.String, java.lang.String);
Code:
0: new #2; //class java/lang/StringBuffer
3: dup
4: invokespecial #3; //Method java/lang/StringBuffer."<init>":()V
7: aload_0
8: invokevirtual #4; //Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
11: aload_1
12: invokevirtual #4; //Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
15: invokevirtual #5; //Method java/lang/StringBuffer.toString:()Ljava/lang/String;
18: areturn