2014-02-19 29 views
1

下面這個簡單的程序與Eclipse編譯器編譯,但沒有界限javac的:Java的通用問題:「不兼容的類型;推斷類型參數(S)java.lang.Object中不符合類型變量(一個或多個)筆

public class Test { 

    public static interface Function<T1, T2, Boolean> { 
     Boolean apply(T1 t1, T2 t2); 
    } 

    private static <T extends Comparable<T>> Function<T, T, Boolean> _cmp(final boolean lt) { 
     return new Function<T, T, Boolean>() { 
      @Override 
      public Boolean apply(T t1, T t2) { 
       if (lt) { 
        return (t1.compareTo(t2) < 0); 
       } else { 
        return (t1.compareTo(t2) > 0); 
       } 
      } 
     }; 
    } 

    public static Function LESS_THAN = _cmp(true); // error line 
    public static Function GREATER_THAN = _cmp(false); // error line 

} 

的Javac的錯誤消息:

java: P:\java-tool\src\main\java\T3.java:20: incompatible types; inferred type argument(s) java.lang.Object do not conform to bounds of type variable(s) T 
found : <T>T3.Function<T,T,java.lang.Boolean> 
required: T3.Function 
+0

什麼'javac'版本? –

+4

我不明白你爲什麼名爲'Boolean'的類型參數。 –

+0

用'javac 1.7.0_45'編譯好我。 –

回答

2

的類型推斷不工作的1.6版本 -

嘗試手動指定類型參數EG -

public static Function LESS_THAN = Test.<Integer>_cmp(true); // error line 

請注意,您使用的是自己的泛型類的原始版本存在。