Java导入类/枚举内部内部类时导入顺序的重要性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java导入类/枚举内部内部类时导入顺序的重要性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1596字,纯文字阅读大概需要3分钟。
内容图文
这是我的班级:
package pepelu;
import pepelu.ImportTest.InnerClass.InnerEnum;
import javax.annotation.Resource;
public class ImportTest {
@Resource
public static class InnerClass {
public enum InnerEnum {
A
}
}
public static void main(String[] args) {
System.out.println(InnerEnum.A);
}
}
当我使用maven构建时,它会给出一个编译错误:
mvn clean compile
[ERROR] /Users/finup/Desktop/a/importtest/src/main/java/pepelu/ImportTest.java:[8,6] cannot find symbol
将导入订单更改为:
import javax.annotation.Resource;
import pepelu.ImportTest.InnerClass.InnerEnum;
我有一个成功的maven构建.
我搜索了文件,但无法找到解释.
有谁能解释一下导入在这种情况下是如何工作的?
解决方法:
我猜原因是一个“循环”依赖:你有一些元素X,你导入在你定义它的同一个文件/类中.
含义:
import pepelu.ImportTest.InnerClass.InnerEnum;
实际上是指同一个文件中的代码:
public static class InnerClass {
public enum InnerEnum {
这意味着:对于编译器,为了处理该导入,它必须在同一文件中查看该类的主体.
似乎javac“立即”做到了.含义:它开始读取import语句,从同一个类导入使其“挂起”查看导入,但检查以下类定义.
并猜测:该类定义使用了另一个导入.为了“处理”该枚举的定义,编译器需要了解@Resource注释的位置/内容.但它还不知道注释(因为编译器还没有看到导入).
更改顺序时,编译器会理解类定义中的@Resource用法.
当然:真正的答案不是重新订购进口产品.真正的答案是不要从import语句后面的类中导入一些东西.这样做绝对没有意义.
编辑,鉴于OP关于如何在Redisson中发挥作用的评论:老实说,我不知道.它可能取决于该类的编译方式.也许这样的代码适用于较新(或较旧)的javac版本,也许这适用于eclipse或intellij或xyz编译器的特定版本.
含义:我给你解释了为什么你遇到这个问题.这并不意味着任何编译器都必须遇到同样的问题.
内容总结
以上是互联网集市为您收集整理的Java导入类/枚举内部内部类时导入顺序的重要性全部内容,希望文章能够帮你解决Java导入类/枚举内部内部类时导入顺序的重要性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。