C# と Java の Generics(テンプレート)の違い?

id:unibon:20080815:p1 の続き。
Java でこれと同じことをしようとしたら、つぎのところで行き詰ってしまった。

import java.util.*;

public class MyTest {
    public static void main(String[] args) {
        List<String> list0 = (new Class0<String>()).hoge0();
        List<String> list1 = Class1.<String> hoge1();
    }
}

class Class0<T0> {
    public List<T0> hoge0() {
        return new ArrayList<T0>();
    }
}

class Class1 {
    public static <T1> List<T1> hoge1() {
        return new ArrayList<T1>();
    }
}

ここまでは一応コンパイルは通る。
しかし、そもそも を Class1 に結びつけるために書く の位置が、C#Java で異なるようなのだが、こういうものなの?
また、hoge0 メソッドを static にしようとするとコンパイルエラーになってしまう。なんで?