![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
教えてください。
下記のようなジェネリクスを使った構文があるのですが、
Car<toyota> t = new Car<toyota>();
そもそも基本的なことですが、
この場合のtoyotaというのは
toyotaというclassがあって
その中で定義されている変数だとかメソッド(?)もしくは
インスタンス化されたオブジェクトが
このCarというオブジェクトの中で使えるという
イメージでしょうか?
Carの中のtoyotaいまいちイメージができていなくて
申し訳ありません。
すみません。よろしくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
型(type または class)から値(instance)を作成する際に、
型の構築子(constructor)に引数を指定して、値の挙動を変えることが出来ます。
同様に、
総称型(generic type)から通常の型(raw type)を作成する際に、
総称型に型引数(type parameter)を指定して、型の挙動を変えることが出来ます。
Car<Toyota> t = new Car<Toyota>() という記述ですが、
総称型 Car に型引数 Toyota を指定して通常の型 Car<Toyota> を作り、
型 Car<Toyota> の構築子に引数(この場合は無し)を指定して値を作り、
型 Car<Toyota> の変数に入れています。
総称型 Car において、型の挙動がどのように変わるのかは分かりませんが、
一般的には公開メソッドの型安全性を高めるために使われることが多い様です。
No.2
- 回答日時:
> Carの中のtoyotaいまいちイメージができていなくて
ご質問の内容を拝見すると
「Car型のインスタンスの中にtoyota型のインスタンスが混ざり合っている」といったニュアンスを感じます。
もし間違っていたら、申し訳ありません、読み飛ばして下さい。
> Car<toyota> t = new Car<toyota>();
この記述は、Car型インスタンスtにおいて扱うデータ型がtoyota型だよということにすぎません。
例えばList<T>というクラスがあります。
このクラスは、扱う複数のデータを順番に並べて管理します。
そして、5番目のデータを取りだしたり、新しいデータを順番の最後に追加したり、管理しているデータの個数を取りだしたりします。
そしてこの段階ではデータとしてどの様なもの(型)を管理するのかが決められていません。
そこでインスタンスの宣言において
List<string>とすれば、順番に並べて管理するデータはstring型ですし
List<toyota>とすれば、順番に並べて管理するデータはtoyota型になります。
それだけのことですね。
おそらくCar型とかtoyota型というのは、ジェネリクスの説明の例えで概念的に登場したもので、具体的な機能は書かれていないのでイメージがし難いのだと思います。
漠然とした例えは理解の助けになることもありますが、却って阻害することもあります。
今回の様な場合は、実際に簡単なプログラムを書いて動作させてみた方が理解しやすいと思います。
No.1
- 回答日時:
う~ん、ある程度型を特定したジェネリクス型なら
ある程度そういうことも出来ます。型を特定してなければ
Objectのメソッドくらいしか使えない。
いずれにしても、型パラメータの型が程度の差こそあれある程度
不祥のままCarをコーディングすることになるので
toyota型の全てのメソッドが使えるわけでは無いです。
ジェネリクスというのは、―群のクラス群に対して同じアルゴリズム
を適用するための仕組み です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
private static という変数の修飾
-
変数名の付け方
-
objective-cで分かりにくい所教...
-
C#において、同じインスタンス...
-
複数の変数を宣言する時、同時...
-
インスタンス参照でアクセスで...
-
VC#での24ビットbmp形式での保...
-
オブジェクト参照がオブジェク...
-
VB6.0で、DLLを動的に参照したい
-
[Visual C#] 優先される処理に...
-
vb.netでFAXを送信する方法
-
C#「オブジェクト参照が必要で...
-
クラスのインスタンス名をクラ...
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
フィールドでのnewとコンストラ...
-
生成したインスタンスを削除す...
-
newしないインスタンス?実体化...
-
VB.NET getとsetの概念がわかり...
-
「インスタンス」の意味をわか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
C#において、同じインスタンス...
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
「インスタンス」の意味をわか...
-
C# インスタンスの破棄
-
生成したインスタンスを削除す...
-
フォームの存在をチェックする方法
-
変数の参照でエラーが出てしま...
-
文字列を日付に変換でParseExce...
-
他のファイルの変数参照
-
エクセル(複数インスタンス)...
-
VB6.0で、DLLを動的に参照したい
-
Form1上にあるTextBox1を Modul...
-
[Visual C#] 優先される処理に...
-
ASPX(C#)で別ファイルで自分で...
-
SQLを連続発行する時の正しい(?...
おすすめ情報