は、私がこれを使用することができ、またはより良い方法?:があるだろう、私は(私は唯一のローカル変数を「セット」でしょう読み取りによって)自分のコードを変更し 外部メソッドを使用してオブジェクトを設定することは意味がありますか?これを使う?
public static <T> void setIfNull(T o, T value) {
if(o == null) {
o = value;
}
}
編集!:
:@SuppressWarnings("unchecked")
public static <T> T set(Class<T> clazz, String path, Object value) {
T result = null;
try {
Field field = clazz.getDeclaredField(path);
field.setAccessible(true);
field.set(null, value);
result = (T) field.get(null);
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
return result;
}
最終編集:上記の「編集」のコードを使用して問題を解決しました。
このメソッドは、メソッドのローカル参照を 'o'に変更する以外の何も行いません。 – bcsb1001
簡単に言えば、メソッド内に 'o'を設定すると、メソッド内でのみ設定されます。 – bcsb1001
@AndrewTobilko彼は、このコードは何の効果もないことを意味します。おそらく、 "o"は囲むクラスの静的フィールドであるという考えがありました。しかし、囲むクラスに静的フィールド "o"があっても、メソッドパラメータ "o"はそれをシャドーイングしています。したがって、上記のコードはパラメータoを更新するだけです。したがって、この方法は「いいえ」です – GhostCat