Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(ジェネリックメソッドの型引数について)
閲覧数:499
掲示板(ジェネリックメソッドの型引数について)
名前
題名 ジェネリックメソッドの型引数について
質問内容

質問を評価する
(0ポイント)
ジェネリックメソッドの型引数がstaticメソッドでも使えるのは何故なのでしょうか?

staticな領域はクラスにひとつしかないと思うのですが、そこに型変数が使用できるというのがいまいち理解できません。

クラスの型変数についてはstatic文脈で使用できないというのを上記のような理解で進めたため、疑問に思い
質問させて頂きました

何か根本的な勘違いもしくは知識不足を晒しているようでお恥ずかしいのですが、納得できるご説明などが頂ければとても嬉しく思います。

宜しくお願い致します
質問日時 2013-12-03 10:49:49
名前
回答内容

回答を評価する
(0ポイント)
例えば
class X<T> {
static List<T> toList(Collection<T> c) {...}
では T が使えませんが、
static <T> List<T> toList(Collection<T> c) {...}
ならメソッド内で宣言してるので使えます。
回答日時 2013-12-03 14:46:12
名前
回答内容

回答を評価する
(0ポイント)
ご回答頂き有難うございます。

頂いた例で申しますと、

static <T> List<T> toList(Collection<T> c) {...}

toList()はstaticなのにメソッド型変数ごとのtoList()が存在するようになってしまうのではないかと思ってしまった次第です。

呼び出し時にバインドした型でstaticメソッドの型が変わってしまったら新しいクラスが必要になるのでは?というような疑問です。

何か前提知識が曖昧なところがあるようなので、もう少し勉強し直してみようと思います。

このような意図の伝わりにくい質問に答えて頂き恐縮です。有難うございます。
回答日時 2013-12-03 16:10:18
名前
匿名
回答内容

回答を評価する
(0ポイント)
Generics導入当時の内容ですが、
かの有名な桜庭さんが記事にしてくださっています。

http://www.javainthebox.net/laboratory/J2SE1.5/LangSpec/Generics/Generics.html

色々ケースを上げて解説されているので、
一助になるかもしれません。
回答日時 2013-12-03 18:27:10
名前
回答内容

回答を評価する
(0ポイント)
ご教示頂き有難うございます。

再学習の為に参考にさせて頂こうと思います。

ジェネリックは使い道も使い方も難しいですね・・・
回答日時 2013-12-04 08:24:55
名前
匿名
回答内容

回答を評価する
(0ポイント)
んー?

>toList()はstaticなのにメソッド型変数ごとのtoList()が存在す

JavaのGenericsは単にコンパイル時に型をチェックする
ためだけにあるんで、クラスメソッドだろうとインスタンス
メソッドだろうと実体は一つだろう。
回答日時 2013-12-04 09:32:31
名前
回答内容

回答を評価する
(0ポイント)
ご指摘ありがとうございます。

確かにメソッドの実体はひとつですよね。変な書き方をして申し訳ありません。

そのひとつしかないはずのメソッドなのにオブジェクトと結び付いていないstaticメソッドが色々な型を持つことができるのが疑問でした。

クラス単位で型引数を使用した場合、型引数ごとにクラスが必要になるからダメ

オブジェクトやメソッド単位であれば型引数を使用してもその単位ごとに型変数イレイジャをキャストすることで問題ないからOK・・・なのかな?

という曖昧な理解しかできていない現状ですので・・・

情報をうまく咀嚼できずに混乱しているので、頭を整理するためにも再学習に励みたいと思います。
回答日時 2013-12-04 13:28:42
名前
匿名
回答内容

回答を評価する
(0ポイント)
>型引数ごとにクラスが必要になる
これは一体何を言ってるんだろう?
回答日時 2013-12-04 18:49:20
回答内容を入力し、「確認」ボタンをクリックしてください。
ログインしていません。ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 ユーザIDをお持ちでない方は「ID登録」からユーザIDの登録を行ってください。
氏名 匿名
回答内容
 



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道