【问题标题】:Bound mismatch error using Generics使用泛型绑定不匹配错误
【发布时间】:2012-05-25 13:12:12
【问题描述】:

当我尝试在 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&lt;T&gt;) 不适用于参数(Class<capture#1- of ?>)。推断类型 capture#1-of ? 不是有界参数 &lt;T extends Principal&gt; 的有效替代品

【问题讨论】:

    标签: java generics collections


    【解决方案1】:

    如果您查看the Javadocs,,您会发现getPrincipals() 现在被定义为采用Class&lt;T extends Principal&gt;——即代表Principal 子类的Class 对象。您的代码必须考虑到这一点,例如,通过使用 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 的强制转换以及大多数括号都是不必要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多