Mdh*_*r9e 2 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);
}
}
Run Code Online (Sandbox Code Playgroud)
错误是:
绑定不匹配:
getPrincipals(Class<T>)类型Subject 的泛型方法不适用于参数(Class<capture#1- of ?>).推断类型capture#1-of ?不是有界参数的有效替代<T extends Principal>
如果你看一下Javadocs,你会发现getPrincipals()现在定义了一个Class<T extends Principal>- 即一个Class表示子类的对象Principal.您的代码必须考虑到这一点,例如,使用以下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));
Run Code Online (Sandbox Code Playgroud)
请注意,您的演员表Collection以及大部分括号都是不必要的.