1. ホーム
  2. java

[解決済み] ArrayList<Long>の初期化

2022-02-19 17:32:08

質問

なぜ、このようにArrayListを初期化できるのですか?

ArrayList<Integer> x = new ArrayList<Integer>(Arrays.asList(1,2));

しかし、使用時にエラーが発生しました。

ArrayList<Long> x = new ArrayList<Long>(Arrays.asList(1,2));

解決方法は?

説明

Javaは自動的に int から long 必要であれば

ただし、Java は同じことをしません。 からの変換が Integer から Long が必要です。

この関数は Arrays.asList(...) を返します。 List<E>E はパラメータとして使用される型です。というように 1, 2, 3 の場合、その型は int . しかし、一般的な使用法である データ型 として List<int> は、Javaでは(少なくとも現在は)不可能です。そのため,自動的に int から Integer を生成し List<Integer> オブジェクトを作成します。この処理を オートボックス Javaは、すべてのデータ型に対して、対応するオブジェクト表現にこれを行うことができます。

ここで、コンストラクタ new ArrayList<Integer>(List<E> list) を期待します。 E のような型であることが必要です。 Integer . ですから List<Integer> は入力として機能します。

しかし new ArrayList<Long>(List<E> list) 明らかに E の型である必要があります。 Long . しかし、オブジェクト Integer 型でない Long ということになります。 受け入れない というパラメータがあります。最初によくあるタイプの IntegerLong は、抽象クラス Number (を保持する)。 Double , Float など) ( ドキュメンテーション ).


解決方法

つまり、すべてはインプットを中心に展開されるのです。 1, 2, 3 と解釈されます。 int ではなく long . これを修正するには 明示的に Javaに 解釈する という数字を long を追加することで、そうすることができます。 l または L の後に番号を入れます。

new ArrayList<Long>(Arrays.asList(1L, 2L, 3L));

今、あなたは List<Long> に追加され、さらに ArrayList<Long> .


なお、同じ手法で、10進数を明示的に float の代わりに double : 1.5F または 1.5f