2012-05-25 58 views
2

當我試圖在1.5中編譯以前的java 1.4代碼時,我得到了這種泛型綁定不匹配問題。下面使用泛型綁定不匹配錯誤

try { 
    ArrayList simplePrincipals = new ArrayList(
      ((java.util.Collection) (subject.getPrincipals(Class 
        .forName("com.efunds.security.jaas.SimplePrincipal"))))); 
    if (simplePrincipals.size() > 0) { 
     ((SimplePrincipal) simplePrincipals.get(0)) 
       .setPermissions(webPerm); 
    } 
} 

的代碼給出的錯誤是:

約束不匹配:用的一般方法類型主題的getPrincipals(Class<T>)不適用於參數(Class<capture#1- of ?>)。推斷類型capture#1-of ?不是有界參數的有效替代<T extends Principal>

回答

5

如果你看看the Javadocs,你會看到getPrincipals()現在被定義採取Class<T extends Principal> - 即代表Principal子類中的Class對象。你的代碼必須考慮到這一點,例如,通過使用asSubclass()方法:

String className = "com.efunds.security.jaas.SimplePrincipal"; 
Class<? extends Principal> clazz = 
    Class.forName(className).asSubclass(Principal.class); 
ArrayList<Principal> simplePrincipals = 
    new ArrayList<Principal>(subject.getPrincipals(clazz)); 

請注意,您的投地Collection以及大部分的括號是不必要的。