IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.
今回のテーマはジェネリクスとリフレクション。Javaのジェネリクスはイレイジャ方式なのでリフレクションでは何も得られないと思ってはいまいか。 public void hoge(List<String> list) {} といったメソッドがあったとして、リフレクションでこのメソッドの情報を得るとしよう。 import java.lang.reflect.*; import java.util.List; public class ReflectionTest { public static void main(String[] args) throws Exception { Method m = ReflectionTest.class.getMethod("hoge", List.class); Type[] types = m.getGenericParameterTypes(); f
JavaとScalaとC#のジェネリクスは、いずれも継承を持ったオブジェクト指向言語においてParametric Polymorphismを実現するための手段であり、それぞれ異なった特性を持っている。というわけで、それぞれの言語においてジェネリクスがどのようにサポートされているかを比較した表を用意してみた。後で気が向いたら、各項目の説明を追加するかも。 Java(5.0以降) Scala C#(4.0) ジェネリックなクラス ○ ○ ○ ジェネリックなメソッド ○ ○ ○ 型パラメータの上限 ○ ○ ○ 型パラメータの下限 × ○ × 型パラメータの推論 ○ ○ ○ 全ての型のサブタイプ(ScalaにおけるNothing) × ○ × definition-site variance × ○ ○ use-site variance ○(Wildcard) ○(Existential Typ
Javaジェネリクス再入門 - プログラマーの脳みそでは、「変数の型の宣言」の項で「ジェネリクスの<>の中は一般のJavaの型の代入互換性とは異なる。このことはよく覚えておかなくてはいけない。」と言ったものの、深入りはしなかった。 このあたりについて深入りしてみようじゃないか。 とりあえずサンプルコードはJavaで記述していくが、このあたりはジェネリクス指向の概念の部分だから、あまり言語に依ることはない。便宜的にJavaで書く、としておこう。 まず、型変数の境界について考えるために以下の継承関係のクラスを用意しておく。 public class A {} public class B extends A {} public class C extends B {} public class B2 extends A {} public class C2 extends B {} これは図で
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く