簡體   English   中英

檢查泛型函數android java中對象的類型

[英]Check type of object in generic function android java

我的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();
}

我想檢查此函數中的值類型(我想檢查BooleanString兩種類型),但是我不知道該怎么做! 有人可以提出任何建議嗎? 謝謝!

編輯:謝謝大家的幫助! 我還有一個問題是如何將其值保存到Preferences

您可以使用Class.isAssignableFrom()

確定此Class對象表示的類或接口是否與指定的Class參數表示的類或接口相同,或者是該類或接口的超類或超接口


更新 :通過問題的編輯,並以設定的鍵/值SharedPreferences.Editor ,使用putString()putBoolean()

考慮到您需要將值作為參數接收。 請注意,如果您接收到該值,則可以訪問其類(因此,您不需要Class<T>作為參數,也不需要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();
}

我沒有在Android上嘗試過它,但是由於它的語法通常與Java等效,因此有兩種在Java中實現的方法:

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

這是Boolean ,因為BooleanString都是最終值,您不必擔心擴展類。 我認為您甚至可以在這種情況下使用== (假設使用普通的ClassLoader ),因為通常在類路徑上每個Class只有一個Class實例。 如果您需要擔心擴展類,請使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM