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 の検証は次回ということで。。。
