web-dev-qa-db-ja.com

プリミティブ型intでtoString()を呼び出すことはできません

基本的に、私がやろうとしていることは、アイテムIDを取得し、基本的に次のようにiniから価格を設定することです。アイテムを取得しようとしています。それを文字列にするにはどうすればよいですか?

public static void getBuyPrice(Item item) {
    try {
        String itemId = item.getId().toString();
        BufferedReader br = new BufferedReader(new FileReader(new File(
                "./data/prices.ini")));
        String line;
        while ((line = br.readLine()) != null) {
            if (line.equals(itemId)) {
                String[] split = line.split(":");
                item.getDefinitions().setValue(Integer.parseInt(split[1]));
            }
        }
        br.close();
    } catch (Throwable e) {
        System.err.println(e);
    }
}

それが私のコードです(もちろん、item.getId()。toString()でエラーが発生します)。これを文字列に変換するにはどうすればよいですか?

11
Alex DaSilva

プリミティブ型はJavaのオブジェクトではないため、メソッドはありません。一致するクラスを使用する必要があります。

Integer.toString(item.getId());
52
MByD
String itemId = Integer.toString(item.getId());
6
Skip Head
String itemId = Integer.toString(item.getId());
3
QuantumMechanic

プリミティブ型(int、double、byteなど)はメソッドを持つことができません。だからこれを使う:

String itemId = String.valueOf(item.getId());
1
Burhan ARAS

別の簡単な方法は、myIntが割り当てられていると仮定して、単に_"" + myInt_と言うことです。

だから試してください:

_item.getDefinitions().setValue("" + Integer.parseInt(split[1]));
_

もちろん、解析エラーがあったり、split [1]がnullだったり、インデックスが範囲外だったりした場合に備えて、行をtry/catchでラップすることもできます。

または、メソッドInteger.valueOf(str)は、(プリミティブではなく)Integerオブジェクトを返します。これにより、.toString()関数を直接呼び出すことができます。

_item.getDefinitions().setValue(Integer.valueOf(split[1]).toString());
_

.valueOf()は多くのIntegerオブジェクトをキャッシュするため、特に気に入っています。

0
E.S.

より良い:

String itemId = String.valueOf(item.getId());
0
Web Sink