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类。在这两种情况下,类与其他类一样,可以具有
静态
和非静态
成员或方法。