打破依赖

时间:2012-10-28 10:46:11

标签: java dependency-injection

我从未深入研究过Java。最近,我不得不处理一个我想调查的行为,因为我还没有完全理解它。

你能解释一下为什么主包不需要导入包b吗?虽然aa方法的参数是B类型。

此代码正常运行。

这种特殊情况可以看作是内联依赖注入吗?

package c;
import b.*;
public class C {
    B b=new B(); 

    public B cc(){ 
        return b; 
    }

}

package a;
import b.*; 

public class A {

    public void aa(B b) {}
}


package b; 
public class B {}



import a.A; 
import c.C; 

public class Test {

    public static void main(String[] args) {

        A a = new A(); 
        C c = new C();
        a.aa(c.cc()); 
        System.out.print("Test"); 
    }
}

1 个答案:

答案 0 :(得分:5)

您只需要导入源代码中明确提到的类型。当您调用cc方法时,编译器已经清楚哪种类型是返回值。导入仅用于将B的提及消除歧义为完全限定的类型名称b.B

不,这与依赖注入无关。在该短语中,“依赖”表示对象与另一个对象的运行时依赖性,与Java类型之间的编译时依赖性无关。