java - 预期的数组类型;找到:'java.util.map'
问题描述
我的变量是第一类,例如:
MyClass{
companion Object{
@JvmField val foo = mapOf("a" to "b")
}
}
当我从另一个类中调用它时,例如:
setBackgroundColor(Color.parseColor(MyClass.foo["..."]));
出现错误提示“Array type expected; found: 'java.util.map < java.lang.String,java.lang.String>'”是什么问题?
请注意,如果我在 MyClass 中进行相同的调用,它会完美运行
这是我真正的数组值:
companion object{
@JvmField val darkMode = mapOf(
"bgColor" to "#000000",
"cardColor" to "#262626"
)
}
解决方案
我刚试过这个:
val foo = mapOf("a" to "Red")
someView.setBackgroundColor(Color.parseColor(foo["a"]))
它工作正常,你能分享更多关于异常的细节吗?
更新
我尝试MyClass
完全按照书面方式使用您的内容,但我已将a
by的值Red
替换为您的b
字符串。
你使用parseColor
正确吗?
/**
* </p>Parse the color string, and return the corresponding color-int.
* If the string cannot be parsed, throws an IllegalArgumentException
* exception. Supported formats are:</p>
*
* <ul>
* <li><code>#RRGGBB</code></li>
* <li><code>#AARRGGBB</code></li>
* </ul>
*
* <p>The following names are also accepted: <code>red</code>, <code>blue</code>,
* <code>green</code>, <code>black</code>, <code>white</code>, <code>gray</code>,
* <code>cyan</code>, <code>magenta</code>, <code>yellow</code>, <code>lightgray</code>,
* <code>darkgray</code>, <code>grey</code>, <code>lightgrey</code>, <code>darkgrey</code>,
* <code>aqua</code>, <code>fuchsia</code>, <code>lime</code>, <code>maroon</code>,
* <code>navy</code>, <code>olive</code>, <code>purple</code>, <code>silver</code>,
* and <code>teal</code>.</p>
*/
@ColorInt
public static int parseColor(@Size(min=1) String colorString) {
if (colorString.charAt(0) == '#') {
// Use a long to avoid rollovers on #ffXXXXXX
long color = Long.parseLong(colorString.substring(1), 16);
if (colorString.length() == 7) {
// Set the alpha value
color |= 0x00000000ff000000;
} else if (colorString.length() != 9) {
throw new IllegalArgumentException("Unknown color");
}
return (int)color;
} else {
Integer color = sColorNameMap.get(colorString.toLowerCase(Locale.ROOT));
if (color != null) {
return color;
}
}
throw new IllegalArgumentException("Unknown color");
}
更新 2:
好的,你说“一个扩展的类RecyclerView.ViewHolder
”,但所说的类只是 RecyclerView 类中的一个抽象类,所以它没有setBackgroundColor
,除非你正在做类似的事情:
yourViewHolderInstance.itemView.setBackgroundColor
.
那么你的 setBackgroundColor 的签名是什么?
它看起来像public void setBackgroundColor(@ColorInt int color) {
吗?
我只是为了好玩才将它添加到我的应用程序中:
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
(holder as BaseViewHolder).bind(getItem(position))
// For Filippo :)
holder.itemView.setBackgroundColor(Color.parseColor(MyClass.foo["a"]))
}
嗯……现在看起来都很红。:)
更新 3
好的,所以根据您上次的更新,您是从 Java 调用它,因此您不能使用 Kotlin 语法...
做这个:
final Map<String, String> foo = MyClass.foo;
yourView.setBackgroundColor(Color.parseColor(foo.get("a")));
显然,您可以避免中间分配并选择:
v.setBackgroundColor(Color.parseColor(MyClass.foo.get("a")));
我通常更喜欢前者,特别是如果你给它所有有意义的名字并且需要调试,但就我而言并没有真正的区别。
推荐阅读
- python - 有没有办法在没有完整的 tensorflow python 库的情况下仅使用 tensorflow.saved_model.load() 进行推理
- android - Jetpack Compose:允许手势通过 Scaffold
- reactjs - Redux thunk 是同步的吗?
- powershell - 为什么我的条件确定用户是否在一个组中总是返回为假?
- reactjs - 对具有状态的空字段反应表单验证
- java - 如何在一个盒子中居中多个对象?
- javascript - 如何在 shopify 的侧边栏过滤器中选择多个选项?
- java - 我的快速排序实现没有正确排序
- javascript - 在画布上单独淡入项目
- arrays - 如何将484等国家代码转换为对应的国家名称墨西哥?