3

私は Java を初めて使用します。Q&A セクションで、可変性が削除された 2 つの例をここで見ました。MutableString.javaをテストすると、次のようになります。

import java.lang.reflect.Field; 

public class MutableString {

    public static void main(String[] args) { 
        String s = "Immutable"; 
        String t = "Notreally"; 

        mutate(s, t);
        StdOut.println(t); 

        // strings are interned so this doesn't even print "Immutable" (!)
        StdOut.println("Immutable");
    } 

    // change the first min(|s|, |t|) characters of s to t
    public static void mutate(String s, String t) {
        try {
            Field val = String.class.getDeclaredField("value"); 
            Field off = String.class.getDeclaredField("offset"); 
            val.setAccessible(true); 
            off.setAccessible(true); 
            int offset   = off.getInt(s); 
            char[] value = (char[]) val.get(s); 
            for (int i = 0; i < Math.min(s.length(), t.length()); i++)
                value[offset + i] = t.charAt(i); 
        } 
        catch (Exception e) { e.printStackTrace(); }
    } 

} 

次のエラーを受け取りました。

java.lang.NoSuchFieldException: offset

以下に関するご意見をお待ちしております。

a)なぜこの例外が発生
するのですか b)クラスに存在するフィールドを確認する方法(具体的にはJava文字列)

4

1 に答える 1