• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kolejność tworzenia nowych klas

Object Storage Arubacloud
0 głosów
130 wizyt
pytanie zadane 5 maja 2017 w Java przez SebekMakaron Obywatel (1,290 p.)

Najpierw kod:

taskLeft = new Task(0, Frame.PATH + name, taskCenter);
taskCenter = new Task(1, Frame.PATH + name, taskLeft, taskRight);
taskRight = new Task(2, Frame.PATH + name, taskCenter);

Jak się przyjrzycie każda tworzona klasa jako parametr przyjmuję inna klasę. Mój problem polega na tym iż np gdy tworze klasę pierwsza 'taskLeft' ona przyjmuje parametr klasy 'taskCenter' a ta klasa nie została jeszcze zainicjowana. I moje pytanie brzmi jak to wykonać lub obejść i napisać inaczej aby tworząc każda klasę mieć już stworzoną klasę brzmi to dziwnie i być może jest to niewykonalne, ale proszę was przyjrzyjcie się kodu zrozumcie o co mi tak naprawdę chodzi bo mogłem napisać dość zawile i spróbujcie mi jakoś pomóc z góry dziękuje.

2 odpowiedzi

+1 głos
odpowiedź 5 maja 2017 przez tangarr Mędrzec (154,780 p.)
wybrane 9 maja 2017 przez SebekMakaron
 
Najlepsza

Zainicjuj taskLeft nullem, dodaj metodę ustawiającą brakujące pole i użyj jej po utworzeniu taskCenter.
 

taskLeft = new Task(0, Frame.PATH + name, null);
taskCenter = new Task(1, Frame.PATH + name, taskLeft, taskRight);
taskRight = new Task(2, Frame.PATH + name, taskCenter);
taskLeft.setCenterTask(taskCenter);

 

0 głosów
odpowiedź 5 maja 2017 przez Ehlert Ekspert (212,670 p.)

tworząc każda klasę mieć już stworzoną klasę

 każda tworzona klasa jako parametr przyjmuję inna klasę

W programowaniu rozróżniamy dwa istotne pojęcie: klasa oraz instancja. Klasa jest zarysem jak wygląda coś, zaś instancja jest namacalnym przykładem tego, obiektem.

import java.lang.Math; // headers MUST be above the first class

public class HelloWorld
{
  public static void main(String[] args)
  {
  	Task leftTask;
    Task rightTask;
    leftTask = new Task();
    rightTask = new Task();
    leftTask.referencedVar = rightTask;
    
    rightTask.someNumber = 5;
    System.out.println(leftTask.referencedVar.someNumber);
  }
}

public class Task{
  
  public Task referencedVar;
  public int someNumber = 2;
 
  public Task(){
    //...
  }
  
}

Jak widzisz Java operuje na zmiennych referencyjnych. Jak rozwiązać Twój problem? Nie przekazuj argumentu w konstruktorze tylko zrób setter.

Nie sugeruj się moim kodem za bardzo. Miał Ci pokazać tylko że używasz referencji. 

Podobne pytania

0 głosów
1 odpowiedź 350 wizyt
pytanie zadane 5 kwietnia 2021 w C i C++ przez Beginner555 Obywatel (1,760 p.)
0 głosów
1 odpowiedź 204 wizyt
pytanie zadane 14 kwietnia 2020 w C i C++ przez nanautzin Obywatel (1,510 p.)
0 głosów
2 odpowiedzi 580 wizyt
pytanie zadane 14 stycznia 2018 w C i C++ przez foruminfa Początkujący (310 p.)

92,555 zapytań

141,400 odpowiedzi

319,537 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...