2017-04-13 56 views
1

我想继承并使用另一个类的静态方法从另一个类设置一个静态变量。java - 是否有可能继承并设置为另一个类的静态变量

这是示例代码:

public class A { 


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


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

其他类,其中i调用静态方法:

public class B{ 

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

    A.setHm(hm); 
} 

我认为在这段代码有一些极其错误的,但我不得不修改代码和类A只能以静态方式使用,所以我想保持这种用法。

Compilator说在A.setHm(hm)我有一个java.lang.ExceptionInInitializerError。

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

谢谢你的回答!

编辑:

public class B{ 

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

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

真正的情况是,我尝试,像你说的@Vladimir,使用静态{}(我指的是块),但是不可能里面的方法和使用静态{}我的方法之外是一个问题,因为我必须把许多变量静态,但在我的代码是很难做到这一点(代码公布只是一个例子,以更好地了解我的问题)。

还有其他想法吗?

回答

0

为什么你要做hm非静态?如果要静态初始化对象,则hm必须为static,必须从static块调用A.setHm(hm)块。

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

    static { 
     A.setHm(hm); 
    } 
} 
+0

我编辑了我的问题,同时感谢您的回答。 – soissy

+0

我明白,与静态我必须使用静态的所有变量和方法,但我认为这是成为一个混合,我冒着失去理智。所以我决定消除大部分的静电。真的非常感谢你的帮助。 – soissy