检查泛型函数android java中的对象类型
我的android应用程序中有一个函数:检查泛型函数android java中的对象类型,java,android,generics,Java,Android,Generics,我的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, Co
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();
}
publicstaticvoidsavelocaldata(上下文、字符串键、类值){
//在此处检查值的类型
SharedReferences prefs=context.getSharedReferences(
常量.PREFERENCES\u KEY,Context.MODE\u PRIVATE);
SharedReferences.Editor=prefs.edit();
if(value.isAssignableFrom(String.class)){
//把价值放在这里
}
else if(value.isAssignableFrom(Boolean.class)){
//把价值放在这里
}
commit();
}
我想检查这个函数中的值的类型(我想检查两种类型布尔值
和字符串
),但我不知道怎么做!有人能给点建议吗?谢谢
编辑:谢谢大家的帮助!我还有一个问题,那就是如何将它的值保存到首选项
你可以用
确定此类对象表示的类或接口
与的超类或超接口相同,或是的超类或超接口
由指定的类参数表示的类或接口
更新:通过问题中的编辑,为了在a中设置键/值,请使用
putString()
和putBoolean()
考虑到您需要接收作为参数的值。请注意,如果您收到该值,您已经可以访问它的类(因此您不需要将class
作为参数,也不需要isAssignableFrom()
),并通过运算符检查它:
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();
}
publicstaticvoidsavelocaldata(上下文、字符串键、T值){
SharedReferences prefs=context.getSharedReferences(
常量.PREFERENCES\u KEY,Context.MODE\u PRIVATE);
SharedReferences.Editor=prefs.edit();
如果(字符串的值实例){
编辑器.putString(键,(字符串)值);
}
else if(布尔值实例){
putBoolean(键,(布尔)值);
}
commit();
}
我还没有在Android上尝试过,但由于它的语法通常与Java相当,所以有两种方法可以在Java中实现:
if (Boolean.class.equals(value) || String.class.equals(value)) {
// Do stuff.
}
这是因为Boolean
和String
都是最终版本,您不必担心扩展类。我认为您甚至可以在这种情况下使用=
(假设是一个正常的类加载器
),因为在类路径上每个类
通常只有一个类的实例。如果您需要担心扩展类,请使用:
if (Boolean.class.isAssignableFrom(value) || String.class.isAssignableFrom(value)) {
// Do stuff.
}
你能详细解释一下你所说的“检查值类型”是什么意思吗?你能再帮我一个问题吗?谢谢我已经编辑了答案。请注意,如果您已经获得了值(您无论如何都需要在函数中接收该值以设置首选项),则无需传递该值的类
。)干得好!非常感谢你!!