2014-10-15 1 views
0

У меня есть этот код ниже:Добавление типа аргумента EnumSet всегда дают мне «Bound несоответствие»

public static <E> Set<E> union(Set<E> set1, Set<E> set2) { 
    Set<E> resultSet = new HashSet<>(set1); 
    resultSet.addAll(set2); 
    return resultSet; 
} 

Я хочу перегружать один метод, как показано ниже, и получить связанное несоответствие:

public static <E> Set<E> union(EnumSet<E extends Enum<E>> set1, EnumSet<E extends Enum<E>> set2){ 
    Set<E> resultSet = set1.clone(); 
    resultSet.addAll(set2); 
    return resultSet; 
} 

И Я перехожу к ниже, и это не сработает.

Почему? И как я могу это сделать?

+0

И границы объявления переменной для 'E'. –

+0

Борис Паук, спасибо. –

ответ

2

Класс EnumSet объявлен следующим

public abstract class EnumSet<E extends Enum<E>> extends ... implements ... { ... } 

Здесь вы можете увидеть, что тип переменной E ограничивается, чтобы быть подтипом Enum<E>. Следовательно, вы должны ограничить переменную типа вашего статического метода таким же образом:

public static <E extends Enum<E>> Set<E> union(EnumSet<E> set1, EnumSet<E> set2) { 
    Set<E> resultSet = set1.clone(); 
    resultSet.addAll(set2); 
    return resultSet; 
}