java:无法将Integer对象强制转换为String

时间:2017-11-19 10:04:38

标签: java object types casting type-conversion

我正在尝试在下面的方法'addClient'中的'data'数组中连接一个名为'update'的String变量中的多个对象:

public int addClient(Object[] data) {

    try {

            if (((String)data[0]).trim().isEmpty() || ((String)data[1]).trim().isEmpty() || ((int)data[2] < 0) || ((int)data[3] <= 0)) {
                return StatusBar.ERR_INVALID_INPUT_CODE;
            }

            // the line below is causing the exception
            String update = "INSERT INTO Client VALUES(" + ((String)data[0]).trim() + "," + ((String)data[1]).trim() + "," + ((Integer)data[3]).intValue() + "," + ((Integer)data[4]).intValue() + "," + ((Boolean)data[2]).booleanValue() + "," + ((String)data[5]).trim() + ")";

            if (statement.executeUpdate(update) != 1) {
                return StatusBar.ERR_INTERNAL_CODE;
            }
     }

     catch (Exception e) {

            e.printStackTrace();

            return StatusBar.ERR_INTERNAL_CODE;
     }

     return StatusBar.ERR_SUCCESS_CODE;
}

但是当上面的代码执行时;引发异常,显示以下消息:

  

java.lang.ClassCastException:java.lang.Integer无法强制转换为   java.lang.String中           在Model.addClient(Model.java:43)

'data'对象数组是通过调用以下方法获得的:

public Object[] getFields() {
                return new Object[]{jTextFieldName.getText(), jTextFieldAddress.getText(),
                                    jComboBoxType.getSelectedIndex(),
                                    jSpinnerPhone.getValue(), jSpinnerFax.getValue(),
                                    jTextFieldWebsite.getText()};
        }

我做了很多搜索并尝试了很多方法,包括String.valueOfInteger.toString,但没有取得任何成功..

为什么我会这样做?怎么解决?

4 个答案:

答案 0 :(得分:2)

你有很多选项投射到String。
您选择了“简单”选项,该选项仅在对象实际为String时才有效,您只需将其(从Object)向下转换为String。

尝试使用以下选项之一:

  • new String(your-Integer-here);
  • (您的整数-这里)的ToString();
  • (你的整数 - 这里)+“”;

让我知道它现在是否正常工作:)

答案 1 :(得分:1)

如果您打算在对象上调用.toString()方法,而不是强制转换为String。

您正在投射对象

if (((String)data[0]).trim().isEmpty() || ((String)data[1]).trim().isEmpty() || ((int)data[2] < 0) || ((int)data[3] <= 0))

if (data[0].toString().trim().isEmpty() || (data[1].toString().trim().isEmpty() || ((int)data[2] < 0) || ((int)data[3] <= 0))

假设data[3]data[2]的类型为整数。

* PS:您还可以记录值,以确定值是什么。

答案 2 :(得分:1)

data数组的元素可以是任何引用类型。因此,如果不首先检查其类型,则无法将它们转换为String

幸运的是,您可以简单地调用他们的toString方法。

更改

((String)data[0])

data[0].toString()

答案 3 :(得分:0)

你可以尝试如下,让我知道它是怎么回事。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/css/materialize.min.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/js/materialize.min.js"></script>



<div class="row">
  <div class="col s12">
    <div class="row">
      <div class="input-field col s12">
        <i class="material-icons prefix">search</i>
        <input type="text" id="autocomplete-input" class="autocomplete">
        <label for="autocomplete-input">Autocomplete</label>
      </div>
    </div>
  </div>
</div>