加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 19:36:08 所属栏目:Java 来源:网络整理
导读:所以我正在进行一些jUnit测试,并希望编写具有类似功能但又足够小以在单个类中编写的不同类.无论设计决定如何,它都会给我带来编译错误,我不确定我看到的规则是什么. 你可以想象它看起来像 package foo;@RunWith(Suite.class)@SuiteClasses({ TestClassOne.cla
所以我正在进行一些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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读