Альтернатива передаче всех аргументов из подкласса-конструктора в суперкласс-конструктор в Java? [Дубликат]

Вы можете проверить rangeOfString, чтобы увидеть, что iPad существует именно так.

NSString *deviceModel = (NSString*)[UIDevice currentDevice].model;

if ([deviceModel rangeOfString:@"iPad"].location != NSNotFound)  {
NSLog(@"I am an iPad");
} else {
NSLog(@"I am not an iPad");
}
2
задан Charles Menguy 15 April 2012 в 03:03
поделиться

3 ответа

7
ответ дан duffymo 20 August 2018 в 17:10
поделиться

Объедините шаблон Bean с Builder. У вашего объекта не будет несогласованного состояния на полпути его конструкции, но он все равно займет 20+ заданных операций, и вы можете сделать свой объект неизменным (если хотите), но не YourObjectBuilder.

public class YourObject {
    private Type field1;
    private Type field2;
    private Type field3;
    ...
    YourObject ( Type field1 , Type field2 , Type field3 ... ) { }
}

public class YourObjectBuilder {
    private Type field1;
    private Type field2;
    private Type field3;
    ...

    public YourObjectBuilder() {
    }

    public YourObject make ( ) {
         return new YourObject ( field1 , field2 , field3 ... ) ;
    }

    public void setField1(Type t) {
        field1 = t;
    }

   public void setField2(Type t) {
        field2 = t;
   }

    public void setField3(Type t) {
        field3 = t;
    }
    ...
}
5
ответ дан emory 20 August 2018 в 17:10
поделиться
  • 1
    Это звучит как приятное решение и способ лучше, чем шаблон Bean, спасибо! – Charles Menguy 15 April 2012 в 03:18
  • 2
    +1 - Это то, что делает IntelliJ. – duffymo 15 April 2012 в 13:49
public class YourObject {
    private Type field1;
    private Type field2;
    private Type field3;
    ...

    public YourObject() {
    }

    public void setField1(Type t) {
        field1 = t;
    }

   public void setField2(Type t) {
        field2 = t;
   }

    public void setField3(Type t) {
        field3 = t;
    }
    ...
}
0
ответ дан Jeffrey 20 August 2018 в 17:10
поделиться
  • 1
    Как я уже сказал в комментарии выше, проблема с таким видом или подходом заключается в том, что мой объект может находиться в противоречивом состоянии частично через его конструкцию! Это очень опасно в моем случае, и я не могу позволить себе это сделать. И вы должны сделать вас классом mutable, чего я не хочу. – Charles Menguy 15 April 2012 в 03:10
  • 2
    @linker Объект будет находиться в несогласованном состоянии частично через его конструкцию, только если вы передадите его другому методу, прежде чем завершить его. Если вам нужно беспокоиться о изменчивости, вы можете создать флаг, чтобы определить, можно ли настроить поля, и переключить его, когда вы закончите создание своего объекта. – Jeffrey 15 April 2012 в 03:17
  • 3
    Я больше разговаривал в многопоточном контексте. Вы правы, я мог бы обеспечить, чтобы объект не был достигнут, прежде чем он будет создан, но это требует дополнительных усилий для обеспечения безопасности потоков. – Charles Menguy 15 April 2012 в 03:33
Другие вопросы по тегам:

Похожие вопросы: