我可以注入内部类的对象吗?

时间:2012-05-16 16:27:55

标签: java exception-handling dependency-injection java-ee-6 cdi

有人知道我是否可以在我的对象中注入内部类? 我想写类似的东西:

@Named
public class ClassA {

    @Inject
    private InnerClass myObject;

    public class InnerClass extends DefaultImplementation implements Serializable{
        public String overriddenMethod() {
            // do something special
        }
    }
}

我想做这些奇怪的事情,因为我有一个默认的实现,我在80%的用例中使用它进行注入。但是对于特殊逻辑,我必须覆盖默认实现中的一些方法。

我不想创建额外的类文件,因为我只想覆盖两行代码。

如果我在OpenWebBeans-Contrainer中尝试代码,我会收到以下错误:

  

javax.enterprise.inject.UnsatisfiedResolutionException:找不到限定符的Api类型[ClassA $ InnerClass]   资格赛:[@ javax.enterprise.inject.Default()]    注入Field:private ClassA $ InnerClass ClassA.myObject

2 个答案:

答案 0 :(得分:2)

如果声明为“public static”

,内部类的注入应该有效

答案 1 :(得分:0)

要解决您的问题,只需将课程更改为

即可
public static class InnerClass //...

它可能看起来有点不直观,但java静态类与c#之类的语言有很大不同。在java中,静态类仅用于您所处的情况,您希望利用嵌套类,而不必首先创建外部类的实例。实际上,在java中创建静态类而不是嵌套类是无效的。

请参阅此答案以获取更多详细信息:Why are you not able to declare a class as static in Java?