[英]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();
}
我想檢查此函數中的值類型(我想檢查Boolean
和String
兩種類型),但是我不知道該怎么做! 有人可以提出任何建議嗎? 謝謝!
編輯:謝謝大家的幫助! 我還有一個問題是如何將其值保存到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
,因為Boolean
和String
都是最終值,您不必擔心擴展類。 我認為您甚至可以在這種情況下使用==
(假設使用普通的ClassLoader
),因為通常在類路徑上每個Class
只有一個Class
實例。 如果您需要擔心擴展類,請使用:
if (Boolean.class.isAssignableFrom(value) || String.class.isAssignableFrom(value)) {
// Do stuff.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.