Java 用内部类注释类
我通过反射创建我的枚举,为此我向每个枚举添加了一个内部类,该类实现了抽象工厂。现在我想访问这个内部类以调用该方法:Java 用内部类注释类,java,reflection,annotations,Java,Reflection,Annotations,我通过反射创建我的枚举,为此我向每个枚举添加了一个内部类,该类实现了抽象工厂。现在我想访问这个内部类以调用该方法: @Factory(FooFactory.class) public enum Foo { FOO, BAR; public class FooFactory implements AbstractFactory<Foo> { public Foo create(String value) { r
@Factory(FooFactory.class)
public enum Foo {
FOO, BAR;
public class FooFactory implements AbstractFactory<Foo> {
public Foo create(String value) {
return valueOf(value.toUpperCase());
}
}
}
但是,通过此操作,我收到以下错误:
类无法解析为FooFactory.java类型
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
public @interface Factory {
Class<?> value();
}
当我尝试@Factory(Foo$FooFactory.class)
时,我收到错误:
无法使用其二进制名称引用嵌套的Foo$FooFactory
那么甚至可以引用嵌套类吗?您使用的是一个非静态嵌套类,其作用域为枚举的各个实例 相反,您需要一个静态嵌套类,如下所示:
public static class FooFactory implements AbstractFactory<Foo> {
public static Foo create(String value) {
return valueOf(value.toUpperCase());
}
}
FooEnum.java
@Factory(FooEnum.FooFactory.class)
public enum FooEnum {
FOO, BAR;
public static class FooFactory {
public static FooEnum create(String value) {
return valueOf(value.toUpperCase());
}
}
}
FooEnumMain.java
public class FooEnumMain {
public static void main(String[] args) {
FooEnum f = FooEnum.FooFactory.create("foo");
System.out.println(f);
}
}
在显示注释时,FooFactory未定义,因此需要指定完整路径:
@Factory(Foo.FooFactory.class)
从评论中。。。显然
@Factory(Foo.FooFactory.class)
是必需的。我怀疑FooFactory需要是
公共静态类
@Charlie我已经尝试过了。枚举通常用于固定的已知值。这似乎有点奇怪。您是否尝试过@Factory(Foo.FooFactory.class)
?@Charlie编译时是的。Charlie你的第二个建议实际上起到了作用,用点分隔内部和外部类是解决方案。如果你愿意,你可以回答这个问题,我接受,因为你是第一个提出这个问题的。然后,你还有一些事情没有告诉我们。。我可以让你的设置工作。我将在代码示例中进行编辑。它确实有效,但与静态
修饰符无关。
@Factory(Foo.FooFactory.class)