【发布时间】:2012-08-24 21:53:14
【问题描述】:
我通过反射创建我的枚举,为此我向每个枚举添加一个实现抽象工厂的内部类。现在我想访问这个内部类以调用该方法:
@Factory(FooFactory.class)
public enum Foo {
FOO, BAR;
public class FooFactory implements AbstractFactory<Foo> {
public Foo create(String value) {
return valueOf(value.toUpperCase());
}
}
}
@Factory的定义是:
@Retention(RetentionPolicy.RUNTIME)
public @interface Factory {
Class<?> value();
}
但是,我收到以下错误:
类无法解析为 FooFactory.java 类型
当我尝试@Factory(Foo$FooFactory.class) 时,我收到错误:
嵌套的 Foo$FooFactory 不能使用其二进制名称来引用。
那么甚至可以引用嵌套类吗?
【问题讨论】:
-
我怀疑 FooFactory 需要是
public static class。 -
@Charlie 我已经试过了。
-
枚举通常用于固定的已知值。这似乎有点奇怪。
-
你试过
@Factory(Foo.FooFactory.class)吗? -
@Charlie 在编译时是的。查理,您的第二个建议实际上确实可以用点分隔内部和外部类是解决方案。如果你愿意,你可以回答这个问题,我接受它,因为你先建议了。
标签: java reflection annotations