[英]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.