To było pytanie zadane w wywiadzie. Czy możemy wywołać jeden konstruktor od drugiego, jeśli klasa ma wiele konstruktorów w java i kiedy? Jak mam nazwać składnię?zadzwoń do jednego konstruktora z innego w java
Odpowiedz
Można, a składnia wiem jest
this(< argument list >);
Można również zadzwonić super klasa konstruktor przez
super(< argument list >);
Zarówno takie połączenia mogą być wykonywane tylko jako pierwsze zdanie w konstruktor (możesz więc wywoływać tylko jeden konstruktor i zanim cokolwiek innego zostanie zrobione).
Nie możesz zrobić niczego, co wymaga odwołania się do tego. –
musi również znajdować się w pierwszym wierszu konstruktora – sixtyfootersdude
tak, pierwszy wiersz, więc będzie pierwszym, który zostanie zaimplementowany – Francis
this(other, args);
To jest mylące lub po prostu błędne! Czym jest inny? Po prostu wywołaj inny konstruktor, używając 'this (args-required-by-constructor)' lub 'super (args-required-by-constructor);' –
przykład:
public class FileDb {
/**
*
*/
public FileDb() {
this(null);
}
public FileDb(String filename) {
// ...
}
}
Tak, możesz to zrobić.
Wystarczy popatrzeć na realizację ArrayList
na przykład:
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
}
/**
* Constructs an empty list with an initial capacity of ten.
*/
public ArrayList() {
this(10);
}
Drugi konstruktor nazywa pierwszy z default capacity
dziesięciu.
FYI, to się nazywa telescoping/telescopic constructor pattern.
To omówione JLS 8.8.7.1 Explicit Constructor Invokations
- Alternatywne wywołania konstruktora zaczynające się od słowa kluczowego
this
(ewentualnie poprzedzony jednoznacznych argumentów typu). Służą do wywoływania alternatywnego konstruktora tej samej klasy.- Wywołania konstruktora superklasy zaczynają się od słowa kluczowego
super
(prawdopodobnie poprzedzone jawnymi argumentami typu) lub wyrażenia podstawowego. Służą do wywoływania konstruktora bezpośredniej nadklasy.
Żadna z odpowiedzi nie jest kompletna, więc dodaję tę do wypełnienia pustych miejsc.
można wywołać konstruktora jeden od drugiego w tej samej klasie, lub zadzwonić do super klasy, z następującymi ograniczeniami:
- To ma być pierwszy wiersz kodu w konstruktorze dzwonisz.
- Nie może zawierać żadnych wyraźnych lub domyślnych odniesień do
this
. Zatem nie można przekazać klasy wewnętrznej (nawet anonimowej, jeśli odwołuje się do jakichkolwiek metod instancji) lub wyniku niestatycznego wywołania metody, jako parametru.
Składnia (jak wspomniano przez innych) to:
MyClass() {
someInitialization();
}
MyClass(String s) {
this();
doSomethingWithS(s);
}
- 1. Zadzwoń do konstruktora niestandardowego z Dapper?
- 2. zadzwoń do rodzica konstruktora w rubinach
- 3. Zadzwoń do podprogramu z innego modułu w języku VBA
- 4. Wywołanie konstruktora z innego konstruktora w tej samej klasie
- 5. Przekazywanie obrazu z jednego widoku do innego
- 6. Porównywanie jednego atrybutu do innego z przeszukiwaczem
- 7. Przekierowanie z jednego widoku do innego - Yii2
- 8. oddania jednego obiektu do innego
- 9. Przenieś plik z jednego okna edytora do innego (tryb podziału).
- 10. Ajax Wicket uaktualnienie jednego dropdown do innego
- 11. Wywołanie jednego polecenia z innego
- 12. lista kopiowanie plików z jednego folderu do innego w R
- 13. jak skopiować z jednego obiektu stringstream do innego w C++?
- 14. wywoływanie konstruktora kopii wewnątrz innego konstruktora
- 15. Kopiowanie jednego strumienia std do innego efektywnie
- 16. Skopiuj zawartość jednego katalogu do innego
- 17. Przekieruj jednego kontrolera do innego kontrolera
- 18. Wywołanie jednego DAO z innego DAO?
- 19. Delphi/Pascal: przeciążenie konstruktora z innego prototypu
- 20. Ustawienie java do korzystania z jednego procesora
- 21. Przypisywanie wartości jednego pola tekstowego do innego
- 22. Przekazywanie zdarzeń klawiatury z jednego kontrolki Windows do innego
- 23. Git kopiowanie zmian z jednego oddziału do innego
- 24. Podejmij wynik z jednego zapytania/mutacji i potoku do innego
- 25. LINUX: Link wszystkie pliki z jednego do innego katalogu
- 26. Przekazywanie tablicy z jednego skryptu Bash do innego
- 27. Przeniesienie milionów elementów z jednego konta magazynu do innego
- 28. Jak skopiować encję z jednego kontekstu Entity Framework do innego?
- 29. Python: Compute względna ścieżka z jednego katalogu do innego
- 30. Przekazywanie całego UIView z jednego ViewController do innego przez UINavigationController
można wyjaśnić kwestię? Istnieje wiele konstruktorów, aby tworzyć obiekty w różny sposób i można je wywoływać z innych klas.Są robione tylko w tym celu. –
oznacza wywołanie konstruktora z innego. – Woot4Moo
pyta, czy dozwolone jest wywoływanie konstruktora od innego konstruktora, czy też nie, gdy klasa ma więcej niż jeden konstruktor. – Francis