0
我有以下的接口,它定義某一類型的Java:混合泛型和可變參數
public interface BaseInterface {
}
此接口將被用來實現一對夫婦枚舉的,如:
public enum First implements BaseInterface {
A1, B1, C1;
}
public enum Second implements BaseInterface {
A2, B2, C2;
}
我d現在像一個小的可重用方法,其工作方式有點像Enum.valueOf(String),我的想法是提供一個常量的名稱和所有可能實現它的類型。它將返回實現接口的枚舉對象(我不必擔心兩個具有相同名稱的枚舉常量的可能性)。客戶端代碼將如下所示:
BaseInterface myConstant = parse("A1", First.class, Second.class);
我卡在哪裏就是方法的定義。我在想沿着線的東西:
@SafeVarargs
private final <T extends Enum<T> & BaseInterface > T parse(String name, Class<T>... types) {
// add code here
}
但是Java編譯器抱怨的types
定義。它只會讓我傳遞一種獨特的類型!以下是有效的:
parse("A1");
parse("A1", First.class);
parse("A1", First.class, First.class);
parse("A1", First.class, First.class, First.class);
parse("A1", Second.class);
parse("A1", Second.class, Second.class);
但有用的版本是不是:
parse("A1", First.class, Second.class);
我如何告訴Java中types
可以採取擴展Enum並實現BaseInterface ALL類?
用'Enum'擴展'BaesInterface'並只使用'BaseInterface'。 – 11thdimension
這是可以理解的,因爲你的聲明所說的'types'將具有**單一類型'T' **的元素,其必須既是枚舉又是'BaseInterface' – biziclop