• ベストアンサー

プリミティブ以外のデータ型が分からないので教えて

class ★★<Object, Integer, List<■■>> ・この時、List<■■>のデータ型を何と呼ぶのでしょうか? (配列型? クラス型? ユーザー定義型? それ以外?) ・「ジェネリクスで指定できる型」と「普通に指定できる型」に違いはありますか? (ジェネリクスでしか指定できない、みたいな型はある?) ・「List<データ型>」の「データ型」として指定できる内容には、どんなものがあるのでしょうか? (ユーザー定義クラス?)

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

> ・不要と思って省略して質問したのですが 略したら意味をなさなくなるのに、どうして不要と思ってしまったのでしょうか。 > ・この書き方だったらできるでしょうか?(クラス宣言時の< >と、インターフェイスの< >は意味が違う?) > ・public class ★★ extends ○○<Object, Integer, List<■■>> ジェネリクスクラス○○<Object, Integer, List<■■>>を継承(extends)して★★クラスを宣言することは可能です。 しかし、「クラス宣言時の< >と、インターフェイスの< >は意味が違う?」の疑問文は、何と何を比較しているのかが分かりません。インターフェイスという話はどこから出てきたのやら。 public class ★★<T> { (定義は省略) } public interface ☆☆<S> { (定義は省略) } このクラス宣言とインターフェイス宣言で、<T>と<S>の間には特に意味の違いはないと思います。ここでTとSはどちらも型パラメータ。 > >型を「ジェネリクスで指定」とはどのような状況のことを指していますか? > ・インターフェイスの< >などで指定している型の意味で質問しました これを読んでも、元の質問である「「ジェネリクスで指定できる型」と「普通に指定できる型」に違いはありますか?」の意味が分かりません。 それぞれについて「こういう構文のここに書く型指定」という具体例を挙げることはできませんか? > ・「リスト」「配列」の違いは、生成時にサイズを決める必要があるか、でしょうか? 使い勝手という点では、それが一番大きな違いでしょうね。言語仕様および実装の観点からは他にもいろいろ違いますし、この文脈でなぜそれを聞くのかも謎ですが。 > ・List<MyClass>の意味は、リストの中身が全て「MyClass」のインスタンスという意味でしょうか? もしくは「MyClass」のメンバ? List<MyClass>は、その要素が全てMyClass型である(MyClassのインスタンス、MyClassのサブクラスのインスタンス、null)ことが保証されているListです。 MyClassのメンバという発想がどこから出てくるのかが分かりません。 > ・List<List<String>[]>の意味は、リストの中身が必ず文字列型の配列、ということでしょうか? 一段階足りていません。List<String>をXと呼ぶことにすると、List<List<String>[]>は、その要素が全て「Xの配列」であるListです。要素が全て「文字列型の配列」でであるListではありません。

re97
質問者

お礼

回答ありがとうございました ・今回一番知りたかった内容は、下記でした >List<MyClass>は、その要素が全てMyClass型である(MyClassのインスタンス、MyClassのサブクラスのインスタンス、null)ことが保証されているList ・質問内容とズレていますが、最初の回答を読んだとき初めて、自分が知りたいことに気が付きました ・インターフェイスの件は、こちらの勘違いです ・また、ジェネリクスの件は、再度勉強して、それでも分からなければ改めて質問したいと思います ・疑問に丁寧に回答いただいたので、大変参考になりましたー

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

> class ★★<Object, Integer, List<■■>> クラスの宣言ではこのような書き方はできないと思います。クラス宣言時に< >の中に書けるのは型パラメータであって、具体的な型ではありません。 > ・この時、List<■■>のデータ型を何と呼ぶのでしょうか? > (配列型? クラス型? ユーザー定義型? それ以外?) 上のような書き方はありませんが、その点をおいておくとList<■■>はクラス型、もっと言えばジェネリクスクラス型でしょう。 Javaにおける配列というのは[ ]を使ってその要素にアクセスできるものなのでList<■■>は配列ではあり得ません。また、ユーザー定義型かどうかとジェネリクスクラスは直交する概念です。 > ・「ジェネリクスで指定できる型」と「普通に指定できる型」に違いはありますか? > (ジェネリクスでしか指定できない、みたいな型はある?) 型を「ジェネリクスで指定」とはどのような状況のことを指していますか? > ・「List<データ型>」の「データ型」として指定できる内容には、どんなものがあるのでしょうか? > (ユーザー定義クラス?) 参照型であれば何でも。ユーザー定義かどうかは問いません。 Listがjava.util.Listのことだとして、List<Object>もList<MyClass>もList<List<String>[]>も可能です。

re97
質問者

補足

回答ありがとうございました。 >クラスの宣言ではこのような書き方はできないと思います ・不要と思って省略して質問したのですが、実際には下記のようになっていました ・この書き方だったらできるでしょうか?(クラス宣言時の< >と、インターフェイスの< >は意味が違う?) ・public class ★★ extends ○○<Object, Integer, List<■■>> >クラス宣言時に< >の中に書けるのは型パラメータであって、具体的な型ではありません ・型パラメータ=型変数(Tなど)でしょうか? >型を「ジェネリクスで指定」とはどのような状況のことを指していますか? ・インターフェイスの< >などで指定している型の意味で質問しました >Listがjava.util.Listのことだとして、List<Object>もList<MyClass>もList<List<String>[]>も可能です ・「リスト」「配列」の違いは、生成時にサイズを決める必要があるか、でしょうか? ・List<List<String>[]>の意味は、リストの中身が必ず文字列型の配列、ということでしょうか? ・List<MyClass>の意味は、リストの中身が全て「MyClass」のインスタンスという意味でしょうか? もしくは「MyClass」のメンバ?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • メソッド(Object... params)

    ■環境 Android(Java) ■前提 HogeClass hoge = new HogeClass(); hoge.execute();  public class HogeClass extends AsyncTask<Object, Integer, List<Item>> {   @Override   protected List<Item> doInBackground(Object... params) { ・引数の「...」初めて見ました ・調べたら、可変長引数、と書いていました ■質問1 ・「...右のparams」は、ユーザーが任意でつけて良い文字列でしょうか? ■質問2 ・executeで引数指定していないので、doInBackgroundには引数は渡っていない、と考えて良いでしょうか? ■質問3 ・executeで引数指定していないのにdoInBackgroundで可変長引数対応している理由は、このメソッド元である抽象メソッド「doInBackground (Params... params)」が可変長引数形式になっているためでしょうか? http://developer.android.com/reference/android/os/AsyncTask.html#doInBackground(Params...) ■質問4 ・この場合の「AsyncTask<Object」は何をしているのでしょうか? ・可変長引数で、0個以上の引数を受け付ける際、その型がObjectであることを保障しているだけでしょうか? ・つまり、絶対にObject型の引数を渡すなら、この記述は省略しても良いのでしょうか? ■質問5 ・ジェネリクスの使い所について ・型を絶対に保障したい時ってどんなときでしょうか? ・基本的にどんな時でも型は保障した方が良いと思うのですが、そうするとジェネリクスだらけにならない?

    • ベストアンサー
    • Java
  • 要素数がプログラム内で変化する配列のクラス間のやりとり

    随分初歩的な質問をしているとは思うのですが、解決方法がみつからないので質問をお願いします。 C++で配列をクラスから呼び出すときに、そのクラスの要素数がプログラム内で変化する場合、 どのようにするのが良いのでしょうか? Class class_A { private: プログラム内で要素数が変化する配列 public: get_hairetu(){return 上の配列} } Class class_A::openfile { テキストからデータ読み込み データ数に応じて配列の大きさが変化 } int main(void) { class_A A; 配列=A.get_hairetu(); ↑ここでclass_Aで決定した配列の要素数に応じて配列の要素数を変化させたいです } なるべくリストではなく配列で作成したいのですが、配列を全クラスで共有する方法があればそちらをお願いします。 (class_Aとmainはそれぞれ別のcppファイルに記述しています) vector型で配列を作ることも考えたのですが、VC++ではなぜか使えませんでした。 質問内容が曖昧で申し訳ありませんが、ぜひ回答をお願いします。

  • 2点質問があります。

    2点質問があります。 ●1点目 Struts + Springで開発を行っています。 その開発チーム内では、DBから一覧画面用のデータを取得する際に SimpleJdbcTemplateのqueryForList()を用い、 上記メソッドより返されたList<Map<String, Object>>型のデータを そのままAction、JSP等で利用しています。 queryForList()の使い方を調べてみると、 Map<String, Object>型のデータをDTOのようなオブジェクトに入れ替えて 再度リスト化してJSP等で利用している例を見かけます。 (http://www.techscore.com/tech/Others/Spring/5-4.htmlなど) 私の開発チームでは、Map<String, Object>型をDTOに入れ替えると その分余計なクラス(DTO)を作らなければならないため、 Map<String, Object>型のまま使っているのですが、 DTOに入れ替えない場合に保守性、性能面等で問題はあるのでしょうか? ●2点目 1点目の質問でMap<String, Object>型のまま利用することに重大な問題点がない という回答が頂けた場合の話です。 登録内容変更画面にて、 以前登録した内容をDBから取得してテキストボックス内に表示し 画面上で値を変更しDBを更新する処理を行う際に、 入力項目が繰り返し入力フィールドとなっています。 この場合、以前の登録内容がDBよりList<Map<String, Object>>型で返され、 JSPで表示する場合に以下のようにして表示が可能でした。 <nested:iterate property="dataList"> <nested:text property='dataString1'/> <nested:text property='dataString2'/> </nested:iterate> またActionFormは以下のように定義しています。 public class DataForm extends ActionForm { private List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>(); //以下dataListのgetter、setter } しかし、画面にてdataString1、dataString2に入力した内容を DataForm.dataListで受け取ることはできませんでした。 ActionFormにて配列やオブジェクトで各入力項目を一旦受け取り List<Map<String, Object>>型に入れなおすのではなく、 直接List<Map<String, Object>>型フィールドで値を受け取ることは不可能なので しょうか? ※これも余計なクラスやフィールドを作成しないという考えに基づいています。 尚、Struts、Springのバージョンは以下の通りです。  Struts:1.2.9  Spring:2.0.8

  • 配列クラスのクラス名

    配列クラスのクラス名 配列クラスのクラス名を教えてください。 配列はクラスですよね。そこまでは分かります。 こんなコードを実行しましたが System.out.println((new int[0]).getClass()); System.out.println((new boolean[0]).getClass()); System.out.println((new String[0]).getClass()); System.out.println((new Integer[0]).getClass()); 親切にこのような結果を出力してくれます。 class [I class [Z class [Ljava.lang.String; class [Ljava.lang.Integer; 結果として配列が何というクラスなのかは分かりません。 (もしかして『[I』『[Z』『[L』という名前のクラスでしょうか?) 昔Javaのソースを読んだときに、配列クラスのファイルも 読んだことがあるような気がするのですが、 なんと言うクラスだったか忘れてしまいました。 パッケージ名+クラス名を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Excel VBA でリストボックスへ行追加について

    お世話になります。 ExcelVBAで、ユーザフォーム表示のときに、リストボックスにデータを追加します。 その際、追加したいアイテムが項目数3の配列なのです。 配列もユーザ定義した配列(2次元配列)を使っています。 配列を作って、.List=Array でセットしようと思ったのですが、コンパイルエラーが出ます。 どうしたらよいでしょうか。 説明がわかりにくいかもしれませんが、よろしくお願い致します。

  • STLのlist どのデータでソートするか分からないデータでソートを行うには?

    class data { public: 文字列型* str; //コンストラクタでN個の配列を生成 int N; //文字列の配列の個数 }; list<data> obj; と書いて、objに対して大量にデータを追加した後、その要素をソートするところで困っています。 データを文字列型のデータの配列の特定のオブジェクトを使ってソートするのに、その方法が見つかりません。 リストのデータの一つ目 str[0] = "abc"; str[1] = "def"; リストのデータの二つ目 str[0] = "ghi"; str[1] = "jkl"; というリストのデータがあったときに、str[0]の要素でソートしたいということなのですが........ メンバのint型などについては、operator<をオーバーロードする方法が見つかったのですが........

  • Stringの値で型キャストしたい(Java)

    最近OKWaveでお世話になっています。 表現がおかしいかもしれませんが、Stringの変数の値を使って、型キャストしたいです。 様々なオブジェクトが入る配列(Vector)を使用しているため、VectorをObject型にして使用しています。 配列のある要素をget()したのち、getClass().getSimpleName()でクラス名を取得し、そのクラス名を、 Object obj = array.get(i); String name = obj.getClass().getSimpleName(); if(name.equal("Integer")) {  method((Integer)obj);   ・   ・   ・ のような形で、場合分けして、メソッドを呼び出しています。 ですが、この方法だと、条件分岐が増えて、見づらいです。 そこで、クラス名を取得したnameをうまく使ってobjを型キャストしたいです。 これを解決させる方法もしくはヒントを教えてください!

    • ベストアンサー
    • Java
  • VB2012でオブジェクト配列が使えますか?

    Visual Studio 2012 に含まれる Visual Basic で昔の Visual Basic 6のように、オブジェクト配列は使えないのでしょうか? 即ち Object 型で定義した配列に複数の Object を代入し、特定のプロパティーを全て同じ値にしてしまうようなことが出来れば、処理が簡単になるので便利です。色々試してみたのですが、私のレベルでは実現できないので、皆様の知識をお貸しください。

  • メソッド宣言の戻り値の型にクラス名を使うには?

    メソッドの戻り値の型にクラス名を使ってるプログラムを見かけたのですが、例えばクラス名を public class Player{ とします。そして Playerクラスのメソッド宣言に  private   Player(戻り値の型) startRun(メソッド名) { とあります。 これは戻り値の型にクラス型の変数を使ってユーザー定義してると思うのですが使い方が分かりません。 javaのサイトはできるだけ調べたのですが戻り値の型にクラス名を使うにはどうすればいいか分かりませんでした。 この使い方を教えてくれるサイトを教えてください。 基本型と参照型のStringクラスについて教えてくれるサイトはたくさん見かけたのですが…。 お願いします。

    • ベストアンサー
    • Java
  • ruby on railsのscaffoldで配列を定義するには

    ruby on railsのscaffoldで配列を定義するには rails2.3での質問です。 通常、scaffoldで >ruby script/generate migration TestData name:string id:integer のようにデータ構造を指定すると思うのですが、この時に配列を定義するには どうしたら良いのでしょうか? 通常の(C言語のような)配列でもハッシュでも構いません。 よろしくお願いいたします。

    • ベストアンサー
    • Ruby
このQ&Aのポイント
  • プリンタードライバーのインストールでbrotherの中からQL800が見つからず困っている方へ。この記事では、見つからない場合の対処方法を解説します。
  • お使いのパソコンがWindowsで、プリンタードライバーのインストールでQL800が見つからない場合の解決方法をご紹介します。
  • QL800のプリンタードライバーをインストールする際に、brotherの中から見つからない場合の対処法についてご紹介します。
回答を見る