Natknąłem się na pewien kod Java, który miał następującą strukturę:
public MyParameterizedFunction(String param1, int param2)
{
this(param1, param2, false);
}
public MyParameterizedFunction(String param1, int param2, boolean param3)
{
//use all three parameters here
}
Wiem, że w C++ mogę przypisać parametrowi wartość domyślną. Na przykład:
void MyParameterizedFunction(String param1, int param2, bool param3=false);
Czy Java obsługuje ten rodzaj składni? Czy są jakieś powody, dla których ta dwuetapowa składnia jest lepsza?
Nie, struktura, którą znalazłeś, jest tym, jak Java to obsługuje (to znaczy z przeciążaniem zamiast domyślnych parametrów).
W przypadku konstruktorów, Zobacz Effective Java: Programming Language Guide's Wskazówka z punktu 1 (Rozważ statyczne metody fabryczne zamiast konstruktorów), jeśli przeciążanie staje się skomplikowane. Dla innych metod, zmiana nazwy niektórych przypadków lub użycie obiektu parametru może pomóc. Dzieje się tak, gdy masz wystarczającą złożoność, że rozróżnianie jest trudne. Zdecydowanym przypadkiem jest sytuacja, w której musisz rozróżnić za pomocą kolejności parametrów, a nie tylko liczby i typu.
Nie.
Możesz osiągnąć to samo zachowanie poprzez przekazanie obiektu, który ma inteligentne ustawienia domyślne. Ale znowu zależy to od tego, jaki jest twój przypadek pod ręką.