gpt4 book ai didi

java - 静态内部类需要导入注解

转载 作者:搜寻专家 更新时间:2023-10-31 08:24:29 26 4
gpt4 key购买 nike

所以我在做一些 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;

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

最佳答案

这很有趣。根据 [1],名称“TestClassOne”的范围是“整个主体”类“TestSuite”。

注解在 “主体” TestSuite 中吗?显然不是。但这不太公平。范围规则是在引入注解之前定义的。如果在类的范围内考虑类注释,我看不出有任何问题。无论如何,他们非常亲密。

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

然而,规范有可能是偶然正确的。这些规则是在引入注释之前定义的,并且之后保持不变。因此,尽管它涵盖了技术性的案例,但它可能是一个意外。这并不是要怀疑语言设计者的脑力——整个规范实在太复杂了。

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

关于java - 静态内部类需要导入注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4800581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com