Java 静态最终字符串字段在运行时仅具有特定值为空
我正在使用Java7和GlassFish 4.1.1创建一个JavaEEWeb项目。我的IDE是NetBeans 当重构存储库类中的一些代码时,我在模型类中将字符串“USERS”替换为静态的final字段。执行此操作(清理并构建)后,我的服务中立即出现了一个IllegalArgumentException,并发现该字段被读取为null 模型类:Java 静态最终字符串字段在运行时仅具有特定值为空,java,jakarta-ee,glassfish,Java,Jakarta Ee,Glassfish,我正在使用Java7和GlassFish 4.1.1创建一个JavaEEWeb项目。我的IDE是NetBeans 当重构存储库类中的一些代码时,我在模型类中将字符串“USERS”替换为静态的final字段。执行此操作(清理并构建)后,我的服务中立即出现了一个IllegalArgumentException,并发现该字段被读取为null 模型类: public class User { public static final String TABLE_NAME = "USERS";
public class User {
public static final String TABLE_NAME = "USERS";
public static final String PRIMARY_KEY = "ID";
private String id;
private String name;
public User(String id, String name) {
this.id = id;
this.name = name;
}
}
用户存储库,在:
public List<User> get() throws RepositoryException
{
try {
return service.retrieve("USERS");
} catch (SQLException ex) {
throw new RepositoryException("Retrieval failed.", ex);
}
}
当然,现在TABLE_NAME的值是错误的
以下是我尝试过的:
- 查找编译错误(没有)
- 清洁和建设
- 从GlassFish取消部署,然后重新部署
- 重新启动NetBeans
- 使这一领域不是最终的
- 谷歌
非常感谢您的帮助!:) 这真的很奇怪,我认为你不能用一个简单的方法重现这种行为?我想把你的表重命名为
USERSS
:)嗯,你有没有试着在有问题的行上设置断点,然后用调试器进行调试?也许这会给我们带来一些启示。你能分享一下你的服务类的代码吗?如果你使用jpa,使用过的数据库?看起来像Java/glassfish中的一些bug。您是否尝试过在其他java/glassfish版本上复制它?
public List<User> get() throws RepositoryException
{
try {
return service.retrieve(User.TABLE_NAME);
} catch (SQLException ex) {
throw new RepositoryException("Retrieval failed.", ex);
}
}
// This works!
public static final String TABLE_NAME = "USERSS";