java - 使用泛型绑定(bind)不匹配错误

标签 java generics collections

当我尝试在 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 type capture#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/

相关文章:

java - 如何将从控制台添加的字符串中的元素添加到java中的列表中

c# - public T GetMyClass<T>() where T : MyClass, new() {/* 这是没有意义的吗? */}

java - 在 Map 中存储抽象类型和具体类型

java - 在这种情况下使用什么集合更合适?

java - 通过 Socket 持续连接到服务器,直到建立连接

java - Android httpGET JSON 数组

java - 改变java中透明像素的颜色

c# - 使用动态生成的类型创建通用类的对象

c# - 泛型方法,使用where T : base. 为什么调用其他方法时不认为T是具体类型?

Java-如何从 HashMap 创建 Java Hashtable