Java(Ja.NET)の中の.NET

Java側から.NETライブラリを使えますが、色々面倒なことが発生します。試しにSystem.Generic.Listを使ってみると、

// import System.*とかやらかすと、JavaのStringと.NETのStringが衝突してしまうので注意
import System.Console;
import System.Int32;
import System.Collections.Generic.*;

public class GenericTest
{
    public static void main(String[] args)
    {
        // javaのプリミティブ型はGenericsの型として受け入れてくれない模様
        // List<int> list = new List<int>(); // NG.

        // なので.NETの値型を渡す
        List<Int32> list = new List<Int32>();

        // Javaの型でもクラスならOK
        // List<Integer> list = new List<Integer>(); // OK.

        for (int i = 0; i < 10; ++i)
            list.Add(i * i);

        // Can only iterate over an array or an instance of java.lang.Iterable
        // IEnumerable<T> -> Iterable<T>の変換はやってくれない模様。
        /*
        for (int i : list)
            Console.WriteLine (i);
         */

        // プロパティアクセスはget_XXX()形式になる
        for (int i = 0; i < list.get_Count(); ++i) 
        {
            // String + Int32のAutoboxingはしてくれないので、
            // Int32 -> intへのキャストをしている
            // このキャストは妥当の模様
            Console.WriteLine ("No." + (int)list.get_Item(i));
        }
    }
}

すげー、面倒。基本的にはC#->Java呼び出しに徹した方が良さそうな感じ。