最近の記事 過去の記事一覧
開発者ブログ
HOME » 開発者ブログ

こんにちは。受託開発担当(ここでは雑記担当)の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());
}

ce382b3e383b3e382bde383bce383ab1
難なく実行できました。

長くなってきたので Java の検証は次回ということで。。。

Permalink: http://www.hos.co.jp/blog/20090924/
Last modified: 2009 年 9 月 24 日 5:23 PM

※ 開発者ブログの内容は無保証です。製品のユーザサポート対象ではありません。ご了承ください。