我正在使用构建器模式,但在设置 feilds 后,其返回 nullpointerException
:
package com.test.sample1;
public class MessageID {
public int BOI1;
public int DOI2;
public int CO3;
public MessageID(int BOI1,int DOI2,int CO3){
this.BOI1=BOI1;
this.DOI2=DOI2;
this.CO3=CO3;
}
public int getBOI1(){
return BOI1;
}
public int getDOI2(){
return DOI2;
}
public int CO3(){
return CO3;
}
}
这里是 BaseServiceRequest.java::
package com.test.sample;
import com.test.sample1.MessageID;
public class BaseServiceRequest {
MessageID messageID;
public BaseServiceRequest(BaseServiceRequestBuilder builder) {
this.messageID = builder.messageID;
}
public MessageID getMessageID() {
return messageID;
}
public static class BaseServiceRequestBuilder {
private MessageID messageID;
public BaseServiceRequestBuilder messageID(MessageID messageID) {
this.messageID =messageID;
return this;
}
}
}
这是主类::
package com.test.sample;
import com.test.sample.BaseServiceRequest.BaseServiceRequestBuilder;
import com.test.sample1.MessageID;
public class Wrapper {
static BaseServiceRequestBuilder builder = new BaseServiceRequestBuilder();
static BaseServiceRequest request;
public static void main(String[] args) {
test(builder);
int syso = request.getMessageID().getBOI1();
System.out.println(syso);
}
public static void test(BaseServiceRequestBuilder builder) {
builder.messageID(new MessageID(23, 34, 12));
}
}
我应该在 request.getMessageID().getBOI1()
处得到 23 的输出,
但出现空指针异常
最佳答案
那是因为您正在调用构建器
的构建方法并丢弃结果。保存结果:
request = builder.messageID(new MessageID(23, 34, 12));
请注意,这并不是真正的构建器模式的示例;这真的是一个工厂。大多数有用的 Builder 类都使用流畅的 API 来使过程清晰且不易出错,并且 Builder 对象包含构造新实例所需的中间状态,如下所示:
request = new BaseServiceRequestBuilder().boi1(23).doi2(34).co3(12).build();
如果您已经拥有 MessageID
对象(可能来自某些传入请求),则构建器也可能接受它作为参数:
request = new BaseServiceRequestBuilder().messageID(id).build();
关于java - 返回 null 的构建器模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20698190/