C#3.0でジェネリックスを使用していた人がJava6でジェネリックスを使用すると...(1)
こんにちは。受託開発担当(ここでは雑記担当)のMasaです。
Java5 が登場してすぐに仕事で使用する機会があったのですが、当時は Generics に感動しました。
その後、C#3.0 での開発を経験し、最近また Java6 で開発しているのですが。。。
Java で一番困ったことは
T instance = new T();
とか
if (T instanceof MyObject) { }
とかできないことです。 C#3.0 はできたのになぁ。とりあえず検証してみます。
まずは C# です。とりあえず適当なクラスを作成します。
public class MyObject { public MyObject() { } } public class MyObject1 : MyObject { public MyObject1() : base() { } } public class MyObject2 : MyObject { public MyObject2() : base() { } } public class Test { static void Main(string[] args) { Test test = new Test(); } }
Test クラスに検証用に MyObject クラスから派生されたクラスの型を指定し、インスタンスを取得するメソッドを追加します。
public T Create<T>() where T : MyObject, new() { if (typeof(T) == typeof(MyObject1)) Console.WriteLine("MyObject1です。"); if (typeof(T) == typeof(MyObject2)) Console.WriteLine("MyObject2です。"); return new T(); }
実行してみます。
static void Main(string[] args) { Test test = new Test(); Console.WriteLine(test.Create<MyObject1>().GetType()); Console.WriteLine(test.Create<MyObject2>().GetType()); }
長くなってきたので Java の検証は次回ということで。。。