Eclipseのコンパイラとjavac

public class Example {
  private static <T> T hoge(Object obj){
    return (T) obj;
  }
  
  public static <T> T hage(Object obj){
    return hoge(obj);
  }
}

みたいな感じで書くとEclipseだとOKだけど、Maven(というかjavac)でコンパイルすると下のメソッドから上のメソッドの戻り値をreturnしているところでこんな感じで怒られます。

型パラメータ <T>T を判別できません; 型変数 T (上限 T,java.lang.Object) の固有の最大インスタンスが存在しません。

こんなときは慌てず騒がずこんな感じで。

  public static <T> T hage(Object obj){
    return Example.<T> hoge(obj);
  }

かっこ悪いけど素直にキャストするのもありかも。

  public static <T> T hage(Object obj){
    return (T) hoge(obj);
  }

参考:http://d.hatena.ne.jp/yone098/20091225/1261747893