2012-05-25 2 views
2

Когда я попытался скомпилировать мой предыдущий код java 1.4 в 1.5, я получил эту проблему с несогласованностью с обобщенными свойствами. Код приведен нижеСвязанная ошибка несоответствия с использованием Generics

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 Несоответствие: Общий метод getPrincipals(Class<T>) типа Тема не применяется для аргументов (Class<capture#1- of ?>). Выведенный тип capture#1-of ? не является допустимым заменителем для ограниченного параметра <T extends Principal>

ответ

5

Если вы посмотрите на 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, а также большинство скобки не нужны.

Смежные вопросы