不兼容的类型:java.lang.Object 无法转换为 java.lang.String

Posted

技术标签:

【中文标题】不兼容的类型:java.lang.Object 无法转换为 java.lang.String【英文标题】:incompatible types: java.lang.Object cannot be converted to java.lang.String 【发布时间】:2016-02-23 04:58:26 【问题描述】:

我正在尝试通过字符串获取元组的值,但是当我这样做时出现错误提示

 incompatible types: java.lang.Object cannot be converted to java.lang.String

这就是我正在尝试的方式。

 `  public void execute(Tuple tuple) 
  String field = tuple.getValueByField("name");

        for(String user:field.split(","))`

我通过强制转换字符串来尝试这样

String field = (String) tuple.getValueByField("name"); 

这是通过字段名获取元组值的正确方法吗?

【问题讨论】:

您使用的是哪个Tuple 类? 是的,如果返回类型是字符串,它是正确的。您是否在 (String) tuple.getValueByField("name"); 上收到任何错误? ? 【参考方案1】:

使用

tuple.getStringByField("name");

getStringByField 用于根据列名检索值。

Apache storm Documentation

what is use of Tuple.getStringByField(“ABC”) in Storm

【讨论】:

【参考方案2】:

尝试改用 getStringByField

如果你想使用 getValueByField 那么你需要检查 if (obj instanceof String) 然后投射它

【讨论】:

【参考方案3】:

是的,如果返回类型是字符串,则正确。

String field = (String) tuple.getValueByField("name"); 

参考示例

http://www.programcreek.com/java-api-examples/index.php?class=backtype.storm.tuple.Tuple&method=getValueByField

【讨论】:

【参考方案4】:

试试这个……

String field = String.valueOf(tuple.getValueByField("name")); 

而不是

String field = (String) tuple.getValueByField("name"); 

【讨论】:

以上是关于不兼容的类型:java.lang.Object 无法转换为 java.lang.String的主要内容,如果未能解决你的问题,请参考以下文章

解决Cannot deserialize instance of `java.util.ArrayList<java.lang.Object>` out of VALUE_STRING

Eclipse 中的 Java 项目:无法解析 java.lang.Object 类型。它是从所需的 .class 文件中间接引用的

xamarin android如何将Java.Lang.Object类型转成C#类型

java编程中基本数据类型是8个,那引用数据类型是接口,数组,String还有啥,有Object么?

Spring Arangodb 存储边缘但因 MappingException 失败:找不到类型类 java.lang.Object 的 PersistentEntity

将 Object[] 转换为 int[] 错误 [重复]