【问题标题】:incompatible types: java.lang.Object cannot be converted to java.lang.String不兼容的类型:java.lang.Object 无法转换为 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"); 上收到任何错误? ?

标签: java collections apache-storm bigdata


【解决方案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"); 
        

        【讨论】:

          猜你喜欢
          • 2020-02-06
          • 2016-10-17
          • 2022-10-17
          • 1970-01-01
          • 2017-10-03
          • 2017-03-29
          • 1970-01-01
          • 1970-01-01
          • 2021-12-12
          相关资源
          最近更新 更多