不兼容的类型: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的主要内容,如果未能解决你的问题,请参考以下文章