据我所知,创建对象时会调用构造函数。即使没有创建对象,我也对如何调用构造函数感到困惑。例如考虑我的代码:
public class MyAdapter {
private static final String APPID = "Foobar";
private static final String ENCPWD = "r4nd0mF0064r==";
private MyDelegate delegate = null;
public MyAdapter(MyDelegate delegate) {
init(delegate);
}
private void init(MyDelegate delegate) {
try {
URL url = new URL("Some url");
QName qname = new QName("http://blahblahblahfoo.com/", "My Service");
Service service = Service.create(url, qname);
delegate = service.getPort(MyDelegate.class);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public MyDelegate getDelegate() {
return delegate;
}
public boolean authenticatePrimeMember(String userID, String userPwd) {
MyDelegate delegate = getDelegate();
// Other unimportant code using APPID and ENCPWD
return false;
}
}
现在,当我从另一个包调用类方法时,例如
boolean auth = MyAdapter.authenticatePrimeMember(someID, LongBeard)
它运行完美!这不应该发生,因为我没有创建任何对象,所以 delegate
无法初始化。有人可以解释一下发生了什么事吗?
更新:一个可能的错误通过了编译器并进行了部署!天啊。
最佳答案
由于 authenticatePrimeMember()
不是静态方法(并且 delegate
不是静态变量),因此您必须创建一个 MyAdapter
在调用之前调用 MyAdapter
对象,否则程序甚至无法编译。再次检查您的代码。
关于java - 是否可以通过调用类方法来调用参数化构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20847910/