首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >静态变量集,但不是gettable -类加载问题(可能?)

静态变量集,但不是gettable -类加载问题(可能?)
EN

Stack Overflow用户
提问于 2018-07-08 02:52:47
回答 1查看 107关注 0票数 0

这对我来说非常奇怪:

1)我有一节课

代码语言:javascript
复制
public class Data {
    private static String name;

    public static String getName() {
        return name;
    }

    public static void setName (String n){
        Data.name = n;
    }
}

这个类变量名是在我的服务器( WAS liberty中的J2EE应用程序)启动时正确设置的-我想在整个服务器生命周期中缓存这些数据。

2)但是当我遇到一个URL,它最终调用了一个执行getter的代码时:

代码语言:javascript
复制
Data.getName(); // this returns null??

有人能想出一个可能的原因吗?也不能调试,我很沮丧。

为了更多地说明我的问题,让我展示一下我的项目结构:

耳朵

CommonJar

WAR1 WAR2

我的Data.java在CommonJar中。这个Data.java是在WAR1中注册的侦听器触发服务器启动时在web.xml中初始化的,从这里我看到了它的设置,并且我使用Data.getName()看到了非空值。--这是我在最初的帖子中的第一步。

然后我在WAR2中有了一个restful风格的HelloWorld服务。当我调用这个HelloWorld服务时,我看到Data.getName()返回null。--这是我在原始帖子中的第二步。甚至不要认为语法类型是容易出错的,因为它不是这样的。

我的理论是:似乎在步骤1中Data.java是由WAR1中的类加载器加载的,然后在我的步骤2中是WAR 2加载的,步骤2加载了一个空的数据类。

为了验证这一理论是否正确,我将Data.java初始化步骤移到了WAR2中(我再次看到它已设置,并且使用Data.getName()看到了非空值),不同之处在于,当我调用此HelloWorld服务时,我看到Data.getName()返回预期的非空值。这一步是我所谓的故障排除突破,因为它似乎表明我的理论是正确的。(但我不能通过在我的实际问题修复中移动代码来修复问题)

那么问题是如何修复,以及如何直观地查看哪个类是由哪个类加载器加载的,以及何时加载的?同样基于WAS Liberty文档,默认的类加载器将是parentsfirst,这意味着Data.java应该由父级加载(在本例中是EAR),所以我不应该把问题放在第一位。

任何人,请指导如何进一步看到问题并解决它?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-07-08 03:20:55

您的getName()函数在声明时没有返回类型,但仍试图返回字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51226097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档