CDの保有枚数を教えてください

class ★★<Object, Integer, List<■■>>

・この時、List<■■>のデータ型を何と呼ぶのでしょうか?
(配列型? クラス型? ユーザー定義型? それ以外?)

・「ジェネリクスで指定できる型」と「普通に指定できる型」に違いはありますか?
(ジェネリクスでしか指定できない、みたいな型はある?)

・「List<データ型>」の「データ型」として指定できる内容には、どんなものがあるのでしょうか?
(ユーザー定義クラス?)

A 回答 (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ではありません。
    • good
    • 0
この回答へのお礼

回答ありがとうございました

・今回一番知りたかった内容は、下記でした
>List<MyClass>は、その要素が全てMyClass型である(MyClassのインスタンス、MyClassのサブクラスのインスタンス、null)ことが保証されているList

・質問内容とズレていますが、最初の回答を読んだとき初めて、自分が知りたいことに気が付きました

・インターフェイスの件は、こちらの勘違いです
・また、ジェネリクスの件は、再度勉強して、それでも分からなければ改めて質問したいと思います

・疑問に丁寧に回答いただいたので、大変参考になりましたー

お礼日時:2013/10/21 13:58

> class ★★<Object, Integer, List<■■>>



クラスの宣言ではこのような書き方はできないと思います。クラス宣言時に< >の中に書けるのは型パラメータであって、具体的な型ではありません。

> ・この時、List<■■>のデータ型を何と呼ぶのでしょうか?
> (配列型? クラス型? ユーザー定義型? それ以外?)

上のような書き方はありませんが、その点をおいておくとList<■■>はクラス型、もっと言えばジェネリクスクラス型でしょう。
Javaにおける配列というのは[ ]を使ってその要素にアクセスできるものなのでList<■■>は配列ではあり得ません。また、ユーザー定義型かどうかとジェネリクスクラスは直交する概念です。

> ・「ジェネリクスで指定できる型」と「普通に指定できる型」に違いはありますか?
> (ジェネリクスでしか指定できない、みたいな型はある?)

型を「ジェネリクスで指定」とはどのような状況のことを指していますか?

> ・「List<データ型>」の「データ型」として指定できる内容には、どんなものがあるのでしょうか?
> (ユーザー定義クラス?)

参照型であれば何でも。ユーザー定義かどうかは問いません。
Listがjava.util.Listのことだとして、List<Object>もList<MyClass>もList<List<String>[]>も可能です。

この回答への補足

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

>クラスの宣言ではこのような書き方はできないと思います
・不要と思って省略して質問したのですが、実際には下記のようになっていました
・この書き方だったらできるでしょうか?(クラス宣言時の< >と、インターフェイスの< >は意味が違う?)
・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」のメンバ?

補足日時:2013/10/20 09:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!