如何在Java类之外访问静态块变量

时间:2019-08-17 10:00:47

标签: java unit-testing testing static-block

我正在处理一些代码,其中我需要从另一类访问存在于一类的静态块中的变量“ hs”。 注意:这两个类都预先设置在不同的程序包中。

代码如下:

public class A{
    static {
        HashSet<String> hs = new HashSet<>();
    }
}

我在Google上进行了搜索,但没有发现任何有用的信息。 您的帮助将非常可观。

编辑:我不允许对此文件进行更改,仍然需要从另一个文件访问它。

为什么要执行此操作,原因是我正在通过JUnit进行单元测试,因此此块返回的内容没有任何内容,可以放入assertEquals()。因此,我留下的选项是测试副作用,并且此变量“ hs”的值将被更改为副作用。这就是为什么我需要从另一个文件访问它。

2 个答案:

答案 0 :(得分:1)

在类中将其声明为public static并在静态块中对其进行初始化

class A1{
public static HashSet<String> hs;
static {
     hs= new HashSet<>();
    }
 }

答案 1 :(得分:1)

需要为变量“ hs”创建getter和setter。

第1类:

public class Test {

    public static HashSet<String> hs;

    static {
        hs = new HashSet<>();
        hs.add("Test14");
        hs.add("Test15");
        hs.add("Test16");
    }

    public static HashSet<String> getHs() {
        return hs;
    }

    public static void setHs(HashSet<String> hs) {
        Test.hs = hs;
    }


}

第2类

如果需要在不使用静态方法的情况下使用“ hs”变量,则:

public class Test2 {

    public void test() {
        Test ts = new Test();
        ts.getHs();
    }
}

如果您需要在静态方法中使用“ hs”变量,则:

public class Test2 {

    public static void test() {
        Test.getHs();
    }
}