Czytam książkę Josha Blocha Efektywna Java i sugeruje użycie wzorca projektowania budowniczego podczas budowania obiektów, które mają dużą liczbę członków. Z tego, co widzę, nie wynika wzór waniliowy, ale wygląda na jego odmianę. Raczej podoba mi się jej wygląd i próbowałem go użyć w aplikacji internetowej C#, którą piszę. Jest to kod napisany w Javie i działa idealnieW jaki sposób pojęcie statyczne w języku Java różni się od C#?
public class Property {
private String title;
private String area;
private int sleeps = 0;
public static void main(String[] args) {
Property newProperty = new Property.Builder("Test Property").Area("Test Area").Sleeps(7).build();
}
private Property(Builder builder) {
this.title = builder.title;
this.area = builder.area;
this.sleeps =builder.sleeps;
}
public static class Builder{
private String title;
private String area;
private int sleeps = 0;
public Builder (String title){
this.title = title;
}
public Builder Area(String area){
this.area = area;
return this;
}
public Builder Sleeps(int sleeps){
this.sleeps = sleeps;
return this;
}
public Property build() {
return new Property(this);
}
}
}
Kiedy kładę to na to, co myślę jest C# równoważne
public class Property
{
private String title;
private String area;
private Property(Builder Builder)
{
title = Builder.title;
area = Builder.area;
}
public static class Builder
{
// Required parameters
private String title;
private String area;
// Optional parameters
private int sleeps = 0;
public Builder(String val)
{
this.title = val;
}
public Builder Area(String val)
{
this.area = val;
return this;
}
public Builder Sleeps(int val)
{
this.sleeps = val;
return this;
}
public Property build()
{
return new Property(this);
}
}
}
Potem dostać ostrzeżenia kompilatora. Większość z nich "nie może zadeklarować członków instancji w klasie statycznej".
Moje pytanie brzmi: po pierwsze, co przeoczyłem? Jeśli coś przeoczyłem, czy mogę to zrobić w sposób zalecany przez Josha Blocha, ale w języku C#, a na koniec, i czy ten ważny jest również ten wątek bezpieczny?
Co "wersja": P masz efektywnej Java? Mam stary i nie obejmuje Buildera. Czytałem, że był to jeden z nowych rozdziałów dodanych po Josh experience @ Google. – OscarRyz