当我尝试在 1.5 中编译以前的 java 1.4 代码时,我遇到了泛型绑定(bind)不匹配问题。代码如下
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);
}
}
错误是:
Bound mismatch: The generic method
getPrincipals(Class<T>)
of type Subject is not applicable for the arguments(Class<capture#1- of ?>)
. The inferred typecapture#1-of ?
is not a valid substitute for the bounded parameter<T extends Principal>
最佳答案
如果你看the 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));
请注意,您的转换为 Collection
并且大多数括号都是不必要的。
关于java - 使用泛型绑定(bind)不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10755046/