Jak odzyskać dane w klasie z obiektu stworzonego w drugiej klasie nie tworząc nowego obiektu

0

Cześć. Tak jak w temacie, potrzebuje odzyskać dane obiektu stworzonego w innej klasie.
Nie wiem jak to zrobić, ponieważ aby się dostać do tych danych muszę stworzyć nowy obiekt.
Na przykładzie:

public czlowiek createObject1() {
        czlowiek czlowiek = new czlowiek();
        czlowiek.setImie("mariusz");
        czlowiek.setNazwisko("nowak");
        System.out.println("jego pies to:" + pies.getImie()); // tutaj potrzebuje mieć to imię 
        return czlowiek;
    }

Tutaj tworzę to imię:

public class test1 {
    public pies createObject2()
    {
        pies pies = new pies();
        pies.setImie("burek");
        return pies;
    }
}

Uprzedzam, nie mogę zrobić public czlowiek createObject1(pies pies) ponieważ, w innej jeszcze klasie nawarstwiają mi się te argumenty metody co skutkuje chaosem.
Czy może przez jakiś konstruktor? Ewentualnie jak zrobić jakąś metodę, która łapała by tylko ten obiekt i robił bym sobie getPies i to mi zwraca obiekt psa.

0

Nie rozumiem z czym masz problem. Niby dlaczego nie mozesz dac settera/konstruktora na pole typu pies?

0
stivens napisał(a):

Nie rozumiem z czym masz problem. Niby dlaczego nie mozesz dac settera/konstruktora na pole typu pies?

Nie rozumiem.
Przypisuje do zmiennej Imie nazwę psa w jednej klasie i tam tworzę obiekt. W drugiej klasie muszę w jakiś sposób pobrać tę nazwę psa bez uprzedniego tworzenia nowego obiektu.

0

XD

private Pies obiektPsa;

this.obiektPsa = parametrPies;

Tylko nie pisz po polsku. Taki przyklad. A zreszta jak juz piszesz to pisz tylko staraj sie w kolejnych projektach przejsc na angielski - taka specyfika zawodu

0

Czyli w klasie test, gdzie chce za pomocą gettera uzyskać imię psa zrobić:

pies obiektPsa;
this.obiektPsa = imie;

?

0

Nie imie tylko instancje psa. To "taki sam" obiekt jak String, nie musisz uzywac typow wbudowanych do definiowania klas

0

Dalej nie wiem jak to zrobić. Co powinienem tam zmienić w takim razie?
Mówisz, że nie imie a napisałeś parametrPies, to ja juz nie wiem o co chodzi :D

0
public static void main(String[] args) {
        test test = new test();
        test1 test1 = new test1();
        test1.createObject2();
        test.createObject1();
    }

Konsola:
podaj imie burek podaj imie ka jego pies to:burek

Klasa test

public class test {
    test1 test1 = new test1();
    pies pies = test1.createObject2();

    public czlowiek createObject1() {
        czlowiek czlowiek = new czlowiek();
        czlowiek.setImie("mariusz");
        czlowiek.setNazwisko("nowak");
        System.out.println("jego pies to:" + pies.imie);
        return czlowiek;
    }
}

Klasa test1

public class test1 {
    Scanner input = new Scanner(System.in);
    public pies createObject2()
    {
        pies pies = new pies();
        System.out.println("podaj imie");
        pies.setImie(input.next());
        return pies;
    }
}
0

Nie mam juz sily... Po co w drugiej klasie robisz nowego psa zamiast przeslac referencje do istniejacego...

1

Możesz przekazać referencje poprzez konstruktor.

public class Dog
{

}

public class Human
{
    private Dog dog;
    
    public Human(Dog dog)
    {
        this.dog = dog;
    }
    // i możesz odwołać się w całej klasie do obiektu dog
}

i w main

Dog dog = new Dog(); // tworzysz nowy obiekt 
Human human = new Human(dog); // tworzysz obiekt human podając referencje do dog

Kod w C#, pewnie działa w javie.

Zresztą to są podstawy, powinieneś jakiś tutorial przeczytać czy coś.

0

Napiszę jeszcze raz:
Mam klasę Dog oraz klasę Human gdzie są gettery i settery odnośnie ich imion i ewentualnego nazwiska dla człowieka.
Mam klasę DogCreator oraz HumanCreator, w której są metody które tworza obiekt Dog oraz obiekt Human.


import java.util.Scanner;

public class DogCreator {
    Scanner input = new Scanner(System.in);

    public Dog createDog() {
        Dog dog = new Dog();
        System.out.println("Input name: ");
        dog.setName(input.next());
        return dog;
    }
}

Chciałbym uzyskać imię psa ustawionego w DogCreator.createDog w HumanCreator


public class HumanCreator {

    public Human createHuman() {
        Human human = new Human();
        human.setImie("mariusz");
        human.setNazwisko("nowak");
        System.out.println("jego Dog to:" + dog.getName());
        return human;
    }
}

W mainie muszę najpierw wywołać createDog, a następnie createHuman. Czyli metoda z createDog nie może się powielać jak to miało miejsce u góry.
Nie mogę zrobić public Human createHuman(Dog dog) ponieważ metoda createHuman jest używana do dodania danych Human do bazy danych.
Gdybym tak to zrobił, to wywołanie wyglądało by tak:

DataBase.inserstDog(dogCreator.createDog());
//później muszę dodać człowieka:
DataBase.insertHuman(HumanCreator.createHuman(dogCreator.createDog));

Czyli robi się zamęt, dlatego chce ominąć przesyłania arugmentó w ten sposób.
Mam nadzieje, ze teraz jest jasno.

1

Zamiast

DataBase.inserstDog(dogCreator.createDog());
//później muszę dodać człowieka:
DataBase.insertHuman(HumanCreator.createHuman(dogCreator.createDog));

Zrób

Dog dog = dogCreator.createDog();
Human human = HumanCreator.createHuman(dog);
DataBase.inserstDog(dog);
DataBase.insertHuman(human);

Co za problem?

3

title

1 użytkowników online, w tym zalogowanych: 0, gości: 1