- ベストアンサー
JavaのGenericsについての質問
- JavaのGenericsにおいて、intとIntegerの扱いについて質問があります。
- 配列の場合は、Genericsでint[]を指定することはできるのでしょうか?
- 初心者のため、Genericsの仕組みについて教えていただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- erichgumma
- ベストアンサー率48% (13/27)
- Yanch
- ベストアンサー率50% (114/225)
関連するQ&A
- JavaのObjectからintへの型変換について
JavaのObject[][]からint[][]への型変換について、質問があります。 Jtableの表の中身を構成する要素【Object[][]】を取り出し、一部をint[][]として数字の条件と比較したいと考えております。 Object型の配列を簡単にintに変換できる方法は例えばどの様なものがあるのでしょうか? 教えていただけるとありがたいです。
- ベストアンサー
- Java
- [Java1.5]Genericsとオーバーロード
現在、Eclipseの上でJavaプログラミングを行っています。 ところが、オーバーロードを行う際にエラーとなり困っています。 疑問点と、解決策をお聞きできるとありがたく思います。 あるプログラムで、単純に言うと以下のようなオーバーロードを行いました。 public static String theFunction(Map<Integer, Integer> theMap){ ・・・ } public static String theFunction(Map<Integer, String> theMap){ ・・・ } すると、一つ目のメソッドに対し Duplicate method theFunction(Map<Integer, Integer> theMap) in ... 二つ目のメソッドに対し Duplicate method theFunction(Map<Integer, String> theMap) in ... というエラーが出てしまいました。 こういうものなのでしょうか? つまり、同じ型のGenericsは、その要素の型が違っていても同一視されるのでしょうか。 またその場合、代替策は無いでしょうか? つまり、 theFunction(x); とした時、x が Map<Integer, Integer> か Map<Integer, String> かによって処理を変える良い方法は無いでしょうか? よろしくお願い致します。
- ベストアンサー
- Java
- Java 可変長引数と優先度
Java 可変長引数と優先度 こんにちは。c#初心者兼、java始めました です。 可変長引数の場合のオーバーロードの優先度について困っています(質問と言うより半分愚痴です)。 javaにも可変長引数ってありますよね。(ジェネリックの弱さにイライラしていたけれど)「javaも捨てたものじゃない」と感心しながら使っていると、いきなりコンパイルエラー。 sampleMethod(10, 20); と書いている部分でエラーが発生していました。 自分のメソッド定義を確認しみると、 void sampleMethod(int...); void sampleMethod(Object...); の2種類のオーバーロードがあり、ambiguousなため判別不能らしいです。 確かに、AutoBoxingされれば、int...だけでなく、Object...にもマッチしますが、どう考えてもBoxingしない方が優先度が高いはずです。というか、高く設定されるべきです。 個人的に基準にしているc#ではこのようなことは起きませんでした。 (あ、やっぱり捨てたものかもしれない ←心変わり早す(ry ) 試しにc#でInteger型のクラスを作り、(実際はタブーですが)暗黙のキャストを双方向でオーバーロードして実験してみました。 public class Integer // ここからc# { private int _value; //---------------------------- public Integer(int value) { _value = value; } //---------------------------- // Integer → int の暗黙の型変換 public static implicit operator int(Integer value) { return value._value; } // int → Integer の暗黙の型変換 public static implicit operator Integer(int value) { return new Integer(value); } //---------------------------- // javaの sampleMethod(int... values)に相当 public static void SampleMethod(params int[] values) { } // javaの sampleMethod(Object... values)に相当 public static void SampleMethod(params Object[] values) { } } そして、Integer.SampleMethod(10, 20); と書いてみると……問題……なし。 ちゃんと、SampleMethod(param int[] values)が選ばれていました。 つまり、(個人的には)java(コンパイラ)の方が不可解な動きをしているのです。 sampleMethod(int, int)とsampleMethod(Object, Object)があるときは問題ないので、可変長引数のときだけambiguousになるようです。 「それなら」と思い、sampleMethod(int, int...)とsampleMethod(Object, Object...)を作ってみましたが、やはりエラーが出ます。 何か良い解決策はあるでしょうか? 可変長じゃない引数のオーバーロードを大量に作ることと、片方の可変長をやめること以外でアドバイスをお願いします。 もしくは、「個人的には~だから、パクリのc#よりjavaの方が動きが正しいぞ!」という方がいらっしゃいましたら、ご意見ください。
- 締切済み
- Java
- javaの不思議
C言語をたしなむ程度にやっているものです。 Javaを勉強していたのですが、不思議だなと思ったので質問させてください。 Integer value = new Integer(30); value.doubleValue() // <- double型に変換している このプログラムだとvalueはintなのにあらかじめdoubleに変換できることを想定しています。 C言語の癖なのかしらないですが、型変換をするならクラスメソッドではなくキャストするか、 メソッドに投げる(Integer.toString←stringにする例ですが)。 この2つの方法が自然な型変換だと思うのですが、変でしょうか?
- ベストアンサー
- Java
- Java NullPointerException
簡単な配列を作っているのですが、現在のコードについてどうしても以下のエラーが解決できません。 java.lang.NullPointerException 今作っているコードは ArrayList<Integer> intList = new intList<Integer>(); intList.add(1); といういうようなシンプルなものです。 ArrayList<Integer>ではなく、int[]にしてもダメでした。(正直この2つの違いもよく分かっていません。) 解決方法(+よろしければ違いの説明も)を教えて頂ければと思います。 宜しくお願い致します。
- ベストアンサー
- Java
- JAVAの型変換(初心者)
プログラミングをはじめたばかりの初心者です。 JAVAについて教えて下さい。 型の変換についてなのですが、 例えばxxxをint型のyyyへの変換をするとき、 (1) int yyy = Integer.parseInt(xxx) (2) int yyy = (int) (xxx) という2つを習ったのですが、どうしてもこの2つの違いがわかりません・・・ この2つは同じものと考えてよいのでしょうか? もし違うのであれば、どんな違いがあるのでしょうか? (yyyの種類によって違う???) よろしくお願いします。
- ベストアンサー
- Java
- Javaの配列の宣言方法のメリット?
1週間ほど前からJavaを独学している者です。 C言語をその前からやっていて、初心者レベル程度ならわかると思います。 そこで、質問です。 C言語の配列宣言: int array[10]; Javaの配列宣言: int array[] = new int[10]; 二つの言語とも、要素10個のarray1次元配列変数を宣言していると思います。 C言語の書き方はシンプルなので、納得がいきますが、Javaの方はどうしてこの形で宣言をするのかわかりません。(自分が言語製作者ならシンプルな書き方を採用します) だから、このような宣言の方法をとるということは何か理由があるのだと思います。 自分が思うところ、JavaはC言語より、柔軟で多機能だとおもうので、その影響で汎用性をますために、 長くなっているのかな~?と思っています。 こんごJavaの学習を進めていくと、例えば、 int array[] = new double[10]; //←エラーになりました みたいに型のちがう、宣言が出てきたりするのでしょうか? ちらっと、学習に使っている本をみたところ、動的配列の作成は別の操作で実現しているようなので、 「動的とは関係ないのかな?」と思っています。 長くなりましたが、Javaの配列宣言のメリットを教えてください。
- ベストアンサー
- Java
- 「オブジェクト」について質問
javaの参考書に、オブジェクトについて、「データとそれを操作する機能をひとまとまりにしたものをオブジェクトといいますが、」と書いてありました。 質問1:抽象的過ぎて、上記の解説がわたしにはよく理解できませんでした。 初心者の私にも理解できるように、身近な具体例を織り交ぜてご説明頂けましたら幸いです。 ^ 質問2:「データとそれを操作する機能をひとまとまり」と書いてありますが、これを配列に例えると、 例えば、int [] n ={3,5,7};という配列があったとします。これに int data=n[0];のように配列要素へのアクセスを行うと、配列は自身の持ってるデータを渡しますよ?これはまさしく「配列はデータを持っていて(上記例ではint型の数値を持っていて)、それを操作する機能(上記例では配列の0番目の要素を変数dataに引き渡す)を持っている」こういうことですか?
- ベストアンサー
- Java
- JAVAプログラム
こんにちは。お世話になります。 JAVAのプログラミングについての質問です。 メインメソッドに配列オブジェクトを作らなければならないのですが、 次の6つのクラスとバリューを含めなければならないんです。 Class ------- Value Integer ----- 5 Integer ----- 42 String ------ "hello" String ------ "there" Person ------ "Laura" 40 Person ------ "Peter" 35 これはプロジェクトの一部なんですが、この意味すらよく把握できていません。 どなたか説明していただけないしょうか? この後、searchメソッドでサーチして、例外処置を行うというものなんです。 この一部分だけでも教えていただけると幸いです。 よろしくお願い致します。
- ベストアンサー
- Java
お礼
なるほど、そういうことだったのですね。ありがとうございました。