繁体   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