到目前为止,我使用构建器模式的以下实现(与此处描述的实现相反):
public class Widget {
public static class Builder {
public Builder(String name, double price) { ... }
public Widget build() { ... }
public Builder manufacturer(String value) { ... }
public Builder serialNumber(String value) { ... }
public Builder model(String value) { ... }
}
private Widget(Builder builder) { ... }
}
Run Code Online (Sandbox Code Playgroud)
这适用于我遇到的大多数情况,我需要使用各种必需/强制和可选参数来构建复杂对象.然而,最近我一直在努力了解当所有参数都是强制性的(或至少绝大多数参数)时,模式是如何有益的.
解决这个问题的一种方法是将传入的参数逻辑分组到它们自己的类中,以减少传递给构建器构造函数的参数数量.
例如,而不是:
Widget example = new Widget.Builder(req1, req2, req3,req4,req5,req6,req7,req8)
.addOptional(opt9)
.build();
Run Code Online (Sandbox Code Playgroud)
分组如下:
Object1 group1 = new Object1(req1, req2, req3, req4);
Object2 group2 …Run Code Online (Sandbox Code Playgroud) 首先,如果这是现有问题的副本,请道歉.不确定如何说出我的问题,这可能就是为什么我还没有找到一个明确的答案.基本上,我想知道以下是否被视为良好做法或是否有更好的方法来做到这一点:
public enum ExampleEnum {
ENTRY_1(new ExampleCodedValue("entry1", "comment1")),
ENTRY_2(new ExampleCodedValue("entry2", "comment2")),
ENTRY_3(new ExampleCodedValue("entry3", "comment3")),
ENTRY_4(new ExampleCodedValue("entry4", "comment4"));
private ExampleCodedValue codedValue;
ExampleEnum(ExampleCodedValue codedValue) {
this.codedValue = codedValue;
}
public ExampleCodedValue getCodedValue() {
return codedValue;
}
}
class ExampleCodedValue {
private final String code;
private final String comment;
ExampleCodedValue(String code, String comment) {
this.code = code;
this.comment = comment;
}
}
Run Code Online (Sandbox Code Playgroud) 我对 SSL/TLS 和 Java 信任/密钥库有点陌生。我正在尝试生成一个客户端来使用来自 IIS 托管的 WSDL 文件的 Web 服务。在将服务配置为需要证书之前,这工作正常。我现在收到一个Wsdl url connection exception.
为了绕过这一点,我通过 IE 保存了 WSDL 的本地副本(通过证书 MMC 管理单元安装了适当的证书)。然后我尝试将 IDEA 指向该位置 ( file:/C:/projects/wsdl/wsdlname.wsdl)。
这失败并显示以下错误消息:
parsing WSDL...
[ERROR] sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid
certification path to requested target unknown location
[ERROR] invalid entity name: "Auth" (in namespace: "******")
line 0 of unknown location
Run Code Online (Sandbox Code Playgroud)
注意:我已经为命名空间加了星号。
提前致谢。