2014-12-13 68 views
0

我有下面的方法,它返回一個包含所有的Types元素的枚舉set:的java EnumSet,不兼容的類型:推斷變量E具有不相容邊界

@Override 
public EnumSet<?> groupTypes() { 
    return EnumSet.allOf(Types.class); 
} 

而且Typesenum象下面這樣:

public enum Types implements GroupType { 
    ASG; 
} 

GroupType接口是:

public interface GroupType extends NamedType { 

} 

NamedType接口:

public interface NamedType { 

    String name(); 

} 

編譯時,我得到了下面的錯誤:

error: incompatible types: inference variable E has incompatible bounds 
return EnumSet.allOf(Types.class); 
         ^

equality constraints: Types 
    upper bounds: Enum<CAP#1>,Enum<E> 
    where E is a type-variable: 
    E extends Enum<E> declared in method <E>allOf(Class<E>) 
    where CAP#1 is a fresh type-variable: 
    CAP#1 extends Enum<CAP#1> from capture of ? 

回答

0

錯誤

Error: incompatible types: inference variable E has incompatible bounds return EnumSet.allOf(Types.class);

告訴你是什麼問題。解決方法之一就是要改變這樣的

public EnumSet<? extends NamedType> groupTypes() { 
     return EnumSet.allOf(Types.class); 
    } 

簽名或者你可以分配到EnumSet.allOf(Types.class)一個變量,那麼就沒有必要改變這樣

public EnumSet<?> groupTypes() { 
    EnumSet<Types> typeses = EnumSet.allOf(Types.class); 
    return typeses; 
} 
方法簽名