【问题标题】:java - is it possible accede and set to a static variable of another classjava - 是否可以加入并设置为另一个类的静态变量
【发布时间】:2017-09-09 17:42:39
【问题描述】:

我想使用另一个类的静态方法加入并设置另一个类的静态变量。

这是示例代码:

public class A {


    private static HashMap<Integer, String> hmFromIdToDesc = null;


    public static void setHm(HashMap<Integer, String> hm) {
    if(hmFromIdToDesc == null) DummyContent.hmFromIdToDesc = hm;}
}

我调用静态方法的另一个类:

public class B{

    private HashMap<Integer, String> hm = new HashMap<Integer, String>();

    A.setHm(hm);
}

我认为在这段代码中存在严重错误,但我必须修改代码,并且 A 类仅以静态方式使用,因此我想保持这种用法。

编译器说在 A.setHm(hm) 上我有一个 java.lang.ExceptionInInitializerError。

我想知道是否有办法从其他类的静态方法中设置静态变量。

谢谢你的回答!!!

编辑:

public class B{

    private HashMap<Integer, String> hm = new HashMap<Integer, String>();

    void myMethod(){
        A.setHm(hm);
    }
}

真正的情况是,我尝试,就像你说的@Vladimir,使用静态{}(我的意思是块)但是在方法内部是不可能的并且在 myMethod 之外使用静态{}是一个问题,因为我必须把许多变量是静态的,但在我的代码中很难做到这一点(发布的代码只是一个示例,可以更好地理解我的问题)。

还有什么想法吗?

【问题讨论】:

    标签: java static static-methods static-variables


    【解决方案1】:

    为什么hm 是非静态的?如果要静态初始化对象,hm 必须是 static 并且必须从 static 块中调用 A.setHm(hm)

    public class B {
        private static HashMap<Integer, String> hm = new HashMap<Integer, String>();
    
        static {
            A.setHm(hm);
        }
    }
    

    【讨论】:

    • 我已经编辑了我的问题,同时感谢您的回答。
    • 我明白,对于静态我必须使用所有静态变量和方法,但我认为这正在成为一种混合,我可能会失去理智。所以我决定尽可能消除大部分静电。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 2015-10-04
    • 2016-06-26
    • 1970-01-01
    • 2013-01-31
    • 2017-03-23
    • 2012-05-04
    相关资源
    最近更新 更多