4

Android アプリケーションに関数があります。

public static <T> void saveLocalData(Context context, String key, Class<T> value) {
    // Check type of value here
    SharedPreferences prefs = context.getSharedPreferences(
            Constants.PREFERENCES_KEY, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    if(value.isAssignableFrom(String.class)){
        //Put value here
    }
    else if(value.isAssignableFrom(Boolean.class)){
        //Put value here            
    }

    editor.commit();
}

この関数で値の型をチェックしたい( と の2つの型をチェックしたいBooleanStringのですが、やり方がわかりません!誰でも提案できますか?ありがとう!

編集済み:助けてくれてありがとう!値を に保存する方法がもう 1 つ問題がありますPreferences

4

2 に答える 2

5

を使用できますClass.isAssignableFrom()

この Class オブジェクトによって表されるクラスまたはインターフェースが、指定された Class パラメーターによって表されるクラスまたはインターフェースと同じか、またはそれらのスーパークラスまたはスーパーインターフェースであるかどうかを判別します


更新: 質問の編集により、キー/値を a に設定するには、 andSharedPreferences.Editorを使用putString()putBoolean()ます。

引数として値を受け取る必要があることを考慮してください。値を受け取った場合、すでにそのクラスにアクセスできることに注意してください (したがってClass<T>、引数として no は必要ありません)。演算子isAssignableFrom()を使用してチェックします。instanceof

public static <T> void saveLocalData(Context context, String key, T value) {
    SharedPreferences prefs = context.getSharedPreferences(
        Constants.PREFERENCES_KEY, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    if (value instanceof String) { 
        editor.putString(key, (String) value);
    }
    else if (value instanceof Boolean){
        editor.putBoolean(key, (Boolean) value);
    }
    editor.commit();
}
于 2012-09-13T09:13:11.350 に答える
1

Android で試したことはありませんが、構文は通常 Java と同等であるため、Java でそれを行うには次の 2 つの方法があります。

if (Boolean.class.equals(value) || String.class.equals(value)) {
    // Do stuff.
}

BooleanStringはどちらも最終的なものであり、拡張クラスについて心配する必要がないため、これは機能します。通常、クラスパスにはperのインスタンスが1つしかないため==、この場合(通常の を想定)でも使用できると思います。クラスの拡張について心配する必要がある場合は、次を使用します。ClassLoaderClassClass

if (Boolean.class.isAssignableFrom(value) || String.class.isAssignableFrom(value)) {
    // Do stuff.
}
于 2012-09-13T09:18:28.337 に答える