我试图学习如何使用模式构建器。我可以让它工作,直到我试图使用枚举。
我尝试多次更改代码,每次都有不同的错误。现在错误是不兼容的类型。
请帮助您将此代码置于工作状态,如果您有改进代码的建议,那就太棒了。
感谢。
编辑: 现在似乎还可以,但是如何将它与主要内部的构建器一起使用? 这是我使用的代码
主:
Person person3 = new Person.PersonBuilder("Julliete", "Kaplan" )
.status(); // what should i write here to set the status?
人类
public class Person
{
private final String name;
private final String lastname;
private final int age;
//My enum im trying to use
private Status status;
public enum Status
{
SINGLE ("Single"), MARRIED ("Married"), WIDOWER ("Widower");
private String status;
private Status(String status)
{
this.status = status;
}
public String getStatus()
{
return this.status;
}
}
//builder
private Person(PersonBuilder builder) {
this.name = builder.name;
this.lastname = builder.lastname;
this.age = builder.age;
this.status = builder.status;
}
//GETTERS
public String getName() {
return name;
}
public String getLastname() {
return lastname;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person : "+this.name+", "+this.lastname+", "+this.age;
}
//PersonBuilder
public static class PersonBuilder
{
private final String name;
private final String lastname;
private int age;
private Status status;
public PersonBuilder(String name, String lastname) {
this.name = name;
this.lastname = lastname;
}
public PersonBuilder age(int age) {
this.age = age;
return this;
}
public PersonBuilder status(Status status)
{
this.status = status;
return this;
}
public Person build() {
Person person = new Person(this);
return person;
}
}
答案 0 :(得分:1)
不要在构建器中定义另一个@foreach($details as $detail)
<detail>
<h2>
<a href="/details/{{$detail->Food_id}}">{{$detail->FoodName}}</a>
</h2>
// food photo
<p><img src="{{ asset('uploads/'.$detail->image) }}" /><p>
</detail>
@endforeach
枚举:重用Status
类中定义的那个。
否则,您必须从Person
的实例映射到PersonBuilder.Status
的实例:它们是完全不同的类型。
目前这种映射很简单:您可以使用Person.Status
- 但您必须确保同时更新两者以具有相同的值(或至少Person.Status.valueOf(personBuilderStatus.name())
映射到子集的PersonBuilder.Status
Person.Status
),这是一个不必要的维护负担。