Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用反射在java for android中强制转换对象_Java_Android_Reflection - Fatal编程技术网

使用反射在java for android中强制转换对象

使用反射在java for android中强制转换对象,java,android,reflection,Java,Android,Reflection,我如何使用java for android中的反射将这一点减少到几行呢 (\u properties是一个ContentValues对象,value是一个对象) 无需思考: _properties.put(key, value.toString()); 不幸的是,ContentValues没有put(String,Object),即使这些值在内部存储在HashMap中 将值存储为String的原因是所有ContentValuesgetAsFoo()访问器都支持从String转换为Foo,我不

我如何使用java for android中的反射将这一点减少到几行呢

\u properties是一个ContentValues对象,value是一个对象)

无需思考:

 _properties.put(key, value.toString());
不幸的是,
ContentValues
没有
put(String,Object)
,即使这些值在内部存储在
HashMap


将值存储为
String
的原因是所有
ContentValues
getAsFoo()
访问器都支持从
String
转换为
Foo
,我不是安卓开发者,所以很抱歉我的无知,但为什么你还要检查
值的类型呢?
这个有问题吗?\u properties.put(key,value)
?@Pshemo
ContentValues
没有通用的
put对象
方法,只有特定类型的类型化方法(因为内部序列化/打包):使用这些方法时,最好是强制转换,而不是转换为字符串,但这只会稍微减少所需的代码(例如
this.\u properties.put)(key,(Byte)value)
这个。(u properties.put(key,(Byte)value))
这个是一样的。(u properties.put(key,Byte.valueOf(value.toString())
,对吗?@谢谢你的澄清,现在它更有意义了。主要问题是引用OP使用的是
Object
类型,比如
Object value=giveMeYourMoney()
,应该与正确的
put
方法一起使用,因为没有通用的
put(String,Object)
方法可以消除歧义。@Xabier否,即使这种情况下的结果相同,但程序不同。使用
toString/valueOf
将值转换为字符串,然后再转换回原始值。由于
valueOf
的返回类型,编译器知道要使用哪个
put
方法,但转换本身并没有起到有效的作用。通过强制转换,您可以直接告诉编译器使用哪种方法。关键字是“early binding”。你的意思是我可以使用value.toString()来存储值,但以后仍然使用instanceOf
(\u properties instanceOf[which\u type\u here])
值将存储为
字符串
s,因此如果使用泛型
get():对象
进行访问,类型信息将丢失。但是
getAs…()
访问器在放弃之前会尝试将
String
s转换为请求的类型。虽然这是一种可行的方法,但在丢失类型时它与原始代码不同。对于无法序列化为字符串而不丢失的类型,反序列化后的值可能略有不同(
Float
Double
)。在大多数情况下,这些问题都是无关紧要的-您不处理任意数据,因此您知道与某些键相关联的类型,我猜到目前为止,没有多少应用程序需要全精度(除了比较浮点值与
=
的初学者代码)。另一方面,您只需编写一次原始代码(使用强制转换)。
 _properties.put(key, value.toString());