Ant*_*t's 1 java groovy design-patterns
我正在尝试有效的Java书并享受它.我读了Builder模式,我试着玩它.我有这样的代码(在Groovy中):
public class Anto {
public static void main(String[] args) {
def testing = new Java.Builder(1).author("antoaravinth").build()
println testing.author
}
}
class Java {
int version
def author
int release_number
public static class Builder {
int version
def author = ""
int release_number = 0
public Builder(int version) {
this.version = version
}
public Builder version(int version)
{
version = version
return this
}
public Builder author(def author)
{
author = author
return this
}
public Builder release_number(int release_number)
{
release_number = release_number
return this
}
public Java build() {
return new Java(this);
}
private Java(Builder builder)
{
version = builder.version
author = builder.author
release_number = builder.release_number
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到这样的错误:
Caught: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: Java(Java$Builder)
groovy.lang.GroovyRuntimeException: Could not find matching constructor for: Java(Java$Builder)
at Java$Builder.build(Anto.groovy:43)
at Java$Builder$build.call(Unknown Source)
at Anto.main(Anto.groovy:4)
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会这样!哪里出错了?
这是你的build()方法:
public Java build() {
return new Java(this);
}
Run Code Online (Sandbox Code Playgroud)
查看你的Java类(不是Builder) - 它没有任何显式声明的构造函数,因此它唯一的构造函数是为你自动声明的公共参数.
你需要移动这个:
private Java(Builder builder)
{
version = builder.version
author = builder.author
release_number = builder.release_number
}
Run Code Online (Sandbox Code Playgroud)
外面Builder类.(我有点惊讶Groovy没有早先抱怨,但我很确定这是问题......)
编辑:现在它没有抛出异常,看看你的"setter"方法:
public Builder version(int version)
{
version = version
return this
}
Run Code Online (Sandbox Code Playgroud)
这version = version条线没有做任何事情.您需要区分参数和字段,例如
public Builder version(int version)
{
this.version = version
return this
}
Run Code Online (Sandbox Code Playgroud)
...或者通过给参数指定不同的名称,例如
public Builder version(int value)
{
version = value
return this
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2391 次 |
| 最近记录: |