首页 / JAVA / Java Enum表现得很奇怪
Java Enum表现得很奇怪
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java Enum表现得很奇怪,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2229字,纯文字阅读大概需要4分钟。
内容图文
我在代码中定义了以下枚举:
public enum Table {
BASE_PRICES("base_prices", Affinity.UPS,
Arrays.asList(
Field.BILLING_WEIGHT_LOWER_BOUND,
Field.BILLING_WEIGHT_UPPER_BOUND,
Field.BASE_PRICE,
Field.SERVICE_TYPE_ID,
Field.ZONE_ID
)),
COUNTRY_CODES("country_codes", Affinity.UPS,
Arrays.asList(Field.COUNTRY_CODE)),
SERVICE_TYPES("service_types", Affinity.UPS,
Arrays.asList(Field.SERVICE_TYPE)),
ZONE_DIVISION("zone_division", Affinity.UPS,
Arrays.asList(
Field.COUNTRY_CODE_ID,
Field.SERVICE_TYPE_ID,
Field.ZONE_ID,
Field.POST_CODE_LOWER_BOUND,
Field.POST_CODE_UPPER_BOUND)),
ZONES("zones", Affinity.UPS,
Arrays.asList(Field.ZONE_CODE));
// used to denote the affinity of a table for
// affinity specific DB cleanup and other stuff.
public enum Affinity {
UPS
}
private String name;
private Affinity affinity;
private List<Field> fields;
private Table(String name, Affinity affinity, List<Field> fields){
this.name = name;
this.affinity = affinity;
this.fields = fields;
System.out.println("ENUM CONSTRUCTOR (" + name + "):");
System.out.println(fields);
System.out.println();
}
public List<Field> getFields(){
return Collections.unmodifiableList(fields);
}
}
当我使用枚举运行单个JUnit测试时,一切都很好.但是,当我运行整个测试套件时,由于枚举未正确初始化,因此在使用null指针异常失败之前在隔离中工作的同一测试,在枚举构造函数中println的输出为:
ENUM CONSTRUCTOR (base_prices):
[BILLING_WEIGHT_LOWER_BOUND, BILLING_WEIGHT_UPPER_BOUND, BASE_PRICE, null, null]
ENUM CONSTRUCTOR (country_codes):
[COUNTRY_CODE]
ENUM CONSTRUCTOR (service_types):
[null]
ENUM CONSTRUCTOR (zone_division):
[null, null, null, null, null]
ENUM CONSTRUCTOR (zones):
[null]
出于某些我不了解的原因,大多数字段(Field也是一个枚举)为null,但仅当我执行整个测试套件时才如此.
我完全一无所知,任何建议都将不胜感激.
谢谢!
解决方法:
我认为您在表和字段之间有一个类加载周期.
请考虑以下枚举:
enum A {
X(B.Z),
A(B b) {
System.out.println("Constructing " + name() + ": " + b);
}
}
enum B {
Z(A.X);
B(A a) {
System.out.println("Constructing " + name() + ": " + a);
}
}
因为A引用B,所以加载A导致B被加载;但是B引用了A,这导致A被加载-除了它已经被加载之外,因此在构造Z时会看到未初始化的字段值(空).
您需要标识此循环(它可能不是这样的长度为2的循环,并且可能不仅涉及枚举类,因此它可能并不完全明显;存在用于标识代码中循环依赖关系的工具)并将其破坏.
内容总结
以上是互联网集市为您收集整理的Java Enum表现得很奇怪全部内容,希望文章能够帮你解决Java Enum表现得很奇怪所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。