2014-10-15 4 views
0

을주고 내가 아래에이 코드를 가지고 : 나는 다음과 같은 한 가지 방법 과부하 및 바인딩 불일치 싶어은 항상 나에게 "바운드 불일치"

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; 
}