gpt4 book ai didi

重载方法的 Java 动态转换

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:58:45 26 4
gpt4 key购买 nike

我正在尝试创建一个函数,我可以在其中传递将放入 ContentValues 中的名称和值.我遇到的问题是我试图允许一次传递多个键/值对,因此键可以是字符串数组,但值必须是对象而 ContentValues.put() 不是允许对象,它们需要转换为 String、Double、Float 等。有没有一种方法可以确定对象的类型并将其转换为调用正确的 put()?下面是一种可行的方法,但它需要我为每种可能的值类型添加一个 if。

 public long create(String[] names, Object[] values) {
ContentValues initialValues = new ContentValues();

for (int i = 0; i < names.length; i++)
{
String type = values[i].getClass().getName();
if (type.equals("java.lang.Double"))
{
initialValues.put(names[i], (Double)values[i]);
}
else if (type.equals("java.lang.String")) {
initialValues.put(names[i], (String)values[i]);
}
else
{
throw new InvalidParameterException("Unable to convert type:"+type);
}
}

return mDb.insert(this.getTableName(), null, initialValues);
}

最佳答案

您的方法是正确的,尽管您应该使用 instanceof 而不是 getClass().getName()。即:

if (values[i] == null) {
initialValues.putNull(names[i]);
} else if (values[i] instanceof Boolean) {
initialValues.put(names[i], (Boolean)values[i]);
} else if (values[i] instanceof Byte) {
initialValues.put(names[i], (Byte)values[i]);
} else if (values[i] instanceof Double) {
initialValues.put(names[i], (Double)values[i]);
} else if (values[i] instanceof Float) {
initialValues.put(names[i], (Float)values[i]);
} else if (values[i] instanceof Integer) {
initialValues.put(names[i], (Integer)values[i]);
} else if (values[i] instanceof Long) {
initialValues.put(names[i], (Long)values[i]);
} else if (values[i] instanceof Short) {
initialValues.put(names[i], (Short)values[i]);
} else if (values[i] instanceof String) {
initialValues.put(names[i], (String)values[i]);
} else if (values[i] instanceof byte[]) {
initialValues.put(names[i], (byte[])values[i]);
} else if (values[i] instanceof ContentValues) {
initialValues.putAll(names[i], (ContentValues)values[i]);
} else {
throw new IllegalArgumentException(
"can't put " + values[i].getClass().getName() + " in ContentValues.");
}

另一种选择是使用反射,但我认为反射是不得已的方法。

如果 ContentValues 不是 final 另一种选择是扩展它并添加一个接受 Object 的方法。

关于重载方法的 Java 动态转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1281293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com