参考文章:
ImportScope中存储的为ImportEntry,继承了Scope.Entry类并且多定义了个origin属性,也就是符号的最终来源。除此之外还对getOrigin()方法进行了覆写,返回origin属性,这是由于静态导入的原因,举例如下:
package com.test19; public class TestStaticParent { public static class AAA{ int a =2; } }
然后在同一个包下编写子类,如下:
package com.test19; public class TestStaticSub extends TestStaticParent{ public static class BBB{ int a; } }
在另外不同的包中通过静态导入两个public静态内部类AAA与BBB,然后就可以使用这两个静态内部类了,如下:
package com.test20; import static com.test19.TestStaticSub.*; public class Test04 { public void m(){ Object o1 = new AAA(); Object o2 = new BBB(); } }
这样Entry类中的scope的owner为ClassSymbol(TestStaticSub),而origin的owner为ClassSymbol(TestStaticParent)
其实除了静态类AAA外,还能将静态方法、静态变量定义在TestStaticParent类中,然后通过上面同样的方法导入到Test04中。
后续需要研究的问题:
(1)如何用origin属性的?