3

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

@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 type [ClassA$InnerClass] is not found with the qualifiers Qualifiers: [@javax.enterprise.inject.Default()] for injection into Field: private ClassA$InnerClass ClassA.myObject

4

2 回答 2

2

如果声明为“public static”,内部类的注入应该可以工作

于 2012-05-22T07:22:08.670 回答
1

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

public static class InnerClass //...

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

有关更多详细信息,请参阅此答案:为什么您不能在 Java 中将类声明为静态?

于 2012-11-21T16:01:55.323 回答