使用泛型的绑定不匹配错误

时间:2012-05-25 13:12:12

标签: java generics collections

当我尝试在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);
    }
}

错误是:

  

绑定不匹配:Subject类型的通用方法getPrincipals(Class<T>)不适用于参数(Class<capture#1- of ?>)。推断类型capture#1-of ?不是有界参数<T extends Principal>

的有效替代

1 个答案:

答案 0 :(得分:5)

如果查看the Javadocs,,您会看到getPrincipals()现在已定义为Class<T extends Principal> - 即Class对象,表示Principal的子类1}}。您的代码必须考虑到这一点,例如,使用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以及大部分括号都是不必要的。