我有一堂这样的课
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/