java – 静态内部类需要导入注释

前端之家收集整理的这篇文章主要介绍了java – 静态内部类需要导入注释前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我正在进行一些jUnit测试,并希望编写具有类似功能但又足够小以在单个类中编写的不同类.无论设计决定如何,它都会给我带来编译错误,我不确定我看到的规则是什么.

你可以想象它看起来像

package foo;

@RunWith(Suite.class)
@SuiteClasses({ TestClassOne.class,TestClassTwo.class })
public class TestSuite{

   @RunWith(SpringJUnit4ClassRunner.class)
   public static class TestClassOne{

   }

   @RunWith(SpringJUnit4ClassRunner.class)
   public static class TestClassTwo{

   }
}

现在,当编译器踢它时,它会说TestClassOne无法解析为一个类型.有一种简单的方法可以解决这个问题.例如,它需要对静态类进行明确的导入.

import foo.TestSuite.TestClassOne; 
import foo.TestSuite.TestClassTwo;

我的问题是,任何人都可以解释一下编译器规则或原因可能会使注释无法看到类静态内部类.请记住,包私有类很好,并且无需导入即可编译.

解决方法

这是一个有趣的.根据[1],名称“TestClassOne”的范围是“整个”类“TestSuite”.

TestSuite的“正文”中是否有注释?显然不是.但那不是很公平.范围规则是在引入注释之前定义的.如果在类的范围内考虑类注释,我没有看到任何问题.无论如何,他们非常亲密.

另一个问题是如何在注释中引用简单名称“TestSuite”?事实证明,规范涵盖了这个.注释是一个修饰符,它是类型声明的一部分,“顶级类型的范围是包中的所有类型声明”.

然而,规范有可能是偶然的.规则是在引入注释之前定义的,之后保持不变.因此虽然它涵盖了技术性案例,但它可能是一个意外.这并不怀疑语言设计师的大脑能力 – 整个规范太复杂了.

[1] http://java.sun.com/docs/books/jls/third_edition/html/names.html#6.3

猜你在找的Java相关文章