当我尝试在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>
答案 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
以及大部分括号都是不必要的。