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

Java 我可以注入一个内部类的对象吗?,java,exception-handling,dependency-injection,java-ee-6,cdi,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() { /

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

@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.UnsatifiedResolutionException:未找到带有限定符的Api类型[ClassA$InnerClass] 限定符:[@javax.enterprise.inject.Default()] 用于注入字段:private ClassA$InnerClass ClassA.myObject


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

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

public static class InnerClass //...
这似乎有点不直观,但java静态类与c#等语言有很大不同。在java中,静态类仅用于您想要使用嵌套类的情况,而不必首先创建外部类的实例。在java中,创建静态类而不是嵌套类实际上是无效的


有关更多详细信息,请参阅此答案:

非常感谢。我意识到我可以注入一个静态类。但是我想让一个类的单个对象有它自己的实例变量。我认为静态类的对象只能有静态变量和方法。我错了吗?错了。没有静态内部类是必须在holder类的实例中创建的类。这意味着内部类有一个“holder指针”(可以访问holder的变量)。静态内部类独立于holder类。在这两种情况下,类与其他类一样,可以具有
静态
和非
静态
成员或方法。