java - 将构造函数参数传递给静态 block

标签 java constructor static static-block

我有一堂这样的课

public class CustomRestClient {

private static String dbString;

public CustomRestClient(String db) {
    this.dbString = db;
}

static {       
    try {
        Client.setServer(Client.Server.LOCAL);
        AuthenticationProvider provider = new AuthenticationProvider();
        provider.setCredentialsProvider(new SimpleCredentialsProvider("user", "pass", dbString, "secretkey"));
        Client.setAuthenticationProvider(provider);
        Client.login();
    } catch (ClientException e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    CustomRestClient customRestClient = new CustomRestClient("db");
 }
}

我试图在静态 block 内传递构造函数参数

provider.setCredentialsProvider(new SimpleCredentialsProvider("user", "pass", dbString, "secretkey"));

例如,CustomRestClient customRestClient = new CustomRestClient("db"); 应将静态 block 内的 dbString 字段设置为 db。但是当我运行该程序时,它说 dbString 字段为空。我不知道我做错了什么

最佳答案

static block在创建 CustomRestClient 对象

之前执行

您应该将静态 block 移动到静态方法并调用它

public static void login(String db) {
        Client.setServer(Client.Server.LOCAL);
        AuthenticationProvider provider = new AuthenticationProvider();
        provider.setCredentialsProvider(new SimpleCredentialsProvider("user", "pass", dbString, "secretkey"));
        Client.setAuthenticationProvider(provider);
        Client.login();
}

并称其为:

CustomRestClient.login("db")

或者(没有静态)将方法移动到带有字符串参数的构造函数中

private String dbString;

public CustomRestClient(String db) {
    this.dbString = db;
    try {
        Client.setServer(Client.Server.LOCAL);
        AuthenticationProvider provider = new AuthenticationProvider();
        provider.setCredentialsProvider(new SimpleCredentialsProvider("user", "pass", dbString, "secretkey"));
        Client.setAuthenticationProvider(provider);
        Client.login();
    } catch (ClientException e) {
        e.printStackTrace();
    }

}

关于java - 将构造函数参数传递给静态 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53429682/

相关文章:

java - 使用 MAHOUT 使用不同的数据集进行测试和训练

Java q关于类结构

c++ - 静态成员的问题

java - Android应用程序执行时间: knowing the thread execution and memory conception

java - 无法将最近移动的项目导入 Eclipse

java - 在 pom.xml 中传递 VM 参数

c++ - 通过请求数组的构造函数初始化子类

java - 在Python中实例化类——设置属性

java - 变量可能已被分配

c - 未命名 block /sope 中静态存储持续时间变量的用途?