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