Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

整数リテラルについて

はじめまして、enokoboと申します。

以下のようなbyte型の引数を持つメソッドを定義した場合、
setValue(0)のように整数リテラルを指定して呼び出すと、
型が一致しないとしてコンパイル エラーとなってしまいます。

void setValue(byte value) {
    (省略)
}

byte型やshort型の整数リテラルを宣言する方法はあるのでしょうか?

以上、何かご存知の方がいらっしゃいましたら、よろしくお願い致します。

9

回答

4540

閲覧

9件の回答

評価

0

明示的にキャストするといいと思います。
たとえば、

setValue((byte)0);

評価

0

ご回答ありがとうございます。

やはり、byte型やshort型の整数リテラルは宣言できないのでしょうか?

評価

0

なぜキャストではまずいのでしょうか?

評価

0

いちいちキャストするのが面倒だというのなら、

void setValue(int n) {
     setValue((byte)n);
}

を定義しておけば、いちいちキャストしないでいいです。

評価

0

mioさん、ご回答ありがとうございます。

お二方にご提示頂いたキャストする方法で検討してみます。

評価

0

念のため、桁落ちには気をつけてね。

評価

0

fugaさん、ありがとうございます。

byte型やshort型の整数リテラルの宣言の可否については
次のことを期待しておりました。

・型安全性の確保
・コンスタント プールの容量削減

言語仕様を確認してみましたが、
そのような整数リテラルは存在しませんでした。

評価

0

一番簡単なのはsetValueの中でキャストする前に渡されたintがbyteで表現可能な範囲かチェックして、範囲外であればException投げてしまう方法だと思います。

評価

0

> fugaさん

メソッドの使い易さと安全性を考慮した良い方法だと思います。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。