【问题标题】:How to access static block variables outside of class in java [duplicate]如何在java中访问类之外的静态块变量[重复]
【发布时间】:2019-08-17 10:00:47
【问题描述】:

我正在编写一些代码,其中我需要从另一个类的静态块中访问变量“hs”。 注意:这两个类都预设在不同的包中。

代码如下:

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

我在 Google 上搜索了一下,但没有发现任何有用的信息。 您的帮助将不胜感激。

编辑:我不允许在此文件中进行更改,但仍需要从其他文件访问它。

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

【问题讨论】:

  • @lealceldeiro 感谢您的快速回复。实际上,这项工作就像我无法对代码进行更改,并且仍然需要从另一个文件中访问它。你能帮我解决一下吗?
  • 您无法访问此变量。它仅在静态块期间临时存在,与A 类无关。
  • 这可能是XY Problem。也许您可以添加一个解释,为什么您甚至不想这样做?
  • @lealceldeiro 不,不是。没有访问修饰符与局部变量相关联。
  • @second 我已经编辑了解释,检查它是否阐明了为什么我需要这样做。

标签: java unit-testing testing static-block


【解决方案1】:

在类中声明为public static,并在静态块中初始化

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

【讨论】:

  • TO 写了他不能更改代码,所以这不是一个真正的选择。
  • 如果不更改代码,他将无能为力@second
【解决方案2】:

需要为变量“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();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多