您不能使用泛型枚举,因为枚举常量本身已经是混凝土(单)的实例。在实例层面,仿制药必须具体。
所以,我会强烈建议使用其他答案中给出的替代方案之一。
如果您必须在枚举中执行此操作,您可以考虑以下内容,它至少为您提供了类型检查的运行时方法,其中包括ClassCastExceptions。尽管如此,你将不会得到编译器的任何支持。
public enum TestEnum {
Test1(Float.class),
Test2(Integer.class),
Test3(String.class);
private final Class<?> iInputType;
private TestEnum(final Class<?> pInputType) {
iInputType = pInputType;
}
public Class<?> getInputType() {
return iInputType;
}
public String stringify(final Object pInput) {
return String.valueOf(iInputType.cast(pInput));
}
}
测试代码:
System.out.println(TestEnum.Test1.stringify(1.23f));
System.out.println(TestEnum.Test2.stringify(42));
System.out.println(TestEnum.Test3.stringify("foo"));
// but:
// System.out.println(TestEnum.Test1.stringify("foo")); // -> ClassCastException!
for (TestEnum test : TestEnum.values()) {
for (Object input : new Object[]{1.23f, 42, "foo"}) {
if (test.getInputType().isAssignableFrom(input.getClass())) {
System.out.println(test.stringify(input));
}
}
}
1.How会调用此方法_______ 2.Does你的代码确实传递函数作为构造函数的参数,还是你输错括号? – josefx 2010-10-22 15:30:38