Java komunikacia tried(noob) – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Java komunikacia tried(noob) – Java – Fórum – Programujte.comJava komunikacia tried(noob) – Java – Fórum – Programujte.com

 

miros47
~ Anonymní uživatel
2 příspěvky
3. 10. 2012   #1
-
0
-

Caute, sorry ak sa to tu uz niekde rozobera, ale chcel by som sa opytat ako sa da ziskat premenna z jednej triedy do druhej. V jednej triede mam v premennej nazov produktu, v druhej triede spolu s inymi vecami to vypisujem a neviem ako mam do tej druhej triedy dostat ten nazov produktu y prvej :D 

Nahlásit jako SPAM
IP: 178.248.252.–
liborb
~ Redaktor
+18
Guru
3. 10. 2012   #2
-
0
-

Každá proměnná třídy může mít svojí metodu Get....., která ji vrací a Set......., která ji nastavuje, takže pak přes Get....... jednoduše dostaneš hodnotu z první třídy ven do jiné třídy (kde pracuješ s instancí první třídy).

Nahlásit jako SPAM
IP: 90.181.216.–
Dano
~ Anonymní uživatel
101 příspěvků
3. 10. 2012   #3
-
0
-

#1 miros47


Zaujimava otazka    bud tak ako napisal libor, alebo priamo v triede kde chces vypisovat produkty 

public class Produkt {

    private String nazov;

    public String getNazov() {
        return nazov;
    }

    public void setNazov(String nazov) {
        this.nazov = nazov;
    }
}
public class Vypis {

    /**
     * Nacitanie produktu.
     *
     * @param produktId identifikator, podla ktoreho viem nacitat pozadovany produkt
     * @return          najdeny produkt
     */
    public Produkt getProdukt(Long produktId) {
        Produkt produkt = null;
        /**
         * Volanie implementacnej vrstvy, ktora nacita pozadovany produkt
         */
        return produkt;
    }

    public List<Produkt> getProduktList() {
        List<Produkt> produkty = new ArrayList<Produkt>();
        /**
         * Volanie implementacnej vrstvy, ktora nacita pozadovany zoznam produktov
         */
        return produkty;
    }

    public static void main(String[] args) {
        Vypis vypis = new Vypis();
        System.out.println("produkt.nazov=" + vypis.getProdukt(1L).getNazov());
        for (Produkt p : vypis.getProduktList()) {
            System.out.println("produkt=" + p.getNazov());
        }
    }
}
Nahlásit jako SPAM
IP: 195.28.127.–
martin
~ Anonymní uživatel
1600 příspěvků
3. 10. 2012   #4
-
0
-

Nebo to muzes zprasit a udelat promennou public ;-)

public class Produkt {
    public String nazov;
}

public class Vypis {
	Produkt.nazov = "abc";
	System.out.println(Produkt.nazov);
}
Nahlásit jako SPAM
IP: 195.113.118.–
liborb
~ Redaktor
+18
Guru
3. 10. 2012   #5
-
0
-

To už bych to radši řešil přes přetížení toString: 

public class Produkt {
	private String name;
    
	public Produkt(String name) {
		this.name = name;
	}

	@Override public String toString() {
		return(name);
	}
} 
public class Test {
	public static void main(String[] args) {
		Produkt	produkt = new Produkt("ABCDE");

		System.out.println("Jmeno produktu je " + produkt);
	}
}
Nahlásit jako SPAM
IP: 90.181.216.–
sleepy0
Stálý člen
3. 10. 2012   #6
-
0
-

#4 martin
To ti asi nepojde ak nazov nenastavis ako static.

class Product{
	public static String name;
	// a dalsich vela statickych premennych;
}

class ProductHandler{
	public ProductHandler(){
		// konstruktor ...
	}

	// najke metody na spravu produktou

	public void print(){
		System.out.println(Product.name);
	}

	public void setProductName(String name){
		Product.name = name;
	}
// a tak dalej ale myslim ze toto je uplne zla myslienka
}

Ako vydis takto by si v celom tvojom programe mohol mat nanajvys 1 produkt. Co by sa dalo osetrit tym ze spravis nieco nasledovne:

class Product{
	public String name;
	public ProductCategory category; // Mnou vymysleny class vobec tam nemusi byt
	public float price; // zda sa mi ze java ma pre peniaze inu premennu

	// Lebo som lenivy ako vos tak si pretazim toString()
	public String toString(){
		return name + " teraz len za neuveritelnych "+ Float.toString(price);
	}
}

class Main{
	public static void main(String[] arg){
		// Vytovris produkt
		Product product = new Product();
		// a teraz musis vsetko nastavit po jednom
		product.name = "Meno prpduktu";
		product.price = 1000f;
		// a tak dalej;
		// teraz mozes vytvorit dalsi produkt
		Product product2 = new Product();
		// a teraz musis znova vsetko nastavit po jednom
		product2.name = "Meno prpduktu";
		product2.price = 1000f;
// ...
		// Vypis
		System.out.println(product); // Toto funguje len vdaka pretazenemu toString
		System.out.println(product2);
		ProductHandler ph = new ProductHandler(/*tu idu premenne podla toho ci si ich nadefinujes v kostruktore*/);
		// a teraz tam odosles produkt do tohto classu
		ph.doSomething(product);
		ph.doSomething(product); // moze to byt aj tvoj vypis
	}
}

public ProductHandler{
	// znova kostruktor

	// metody
	public void doSomething(Product product){
		// kod ktory naraba s produktom
	}
}

Lepsie je to ako vyssie spomenul liborb, ale ja by som to este vylepsil o to ze napriklad meno produktu, kategoria, a pod. sa nezvyknu menit cize by som este okrem toho pridal pred String nazov final, len potom to treba definovat uz priamo v kostrukotre.

class Product{
	// Premenne ktore su pre produkt konstantne
	private final String name;
	private final ProductCategory category;
	// a vela dalsieho napriklad rozmery, hmotnost, spotreba a tak...
	
	// premenne
	private float price;

	public Product(String name, ProductCategory category, float price){
		this.name = name;
		this.category = category;
		this.price = price;
		// a vselico ine
	}

	public String getName(){
		return this.name;
	}

	public ProductCategory getCategory(){
		return this.category;
	}

	public void setPrice(float newPrice){
		this.price = newPrice;
	}

	public float getPrice(){
		return this.price;
	}

	// napriklad aj rovanky toString ako minule
}

class ProductHandler{
	// konstruktor a vela metod

	public void print(Product product){
		System.out.println(product);
		// alebo samostatne napr. len meno
		System.out.println(product.getName());
	}
}
Nahlásit jako SPAM
IP: 158.195.195.–
miros47
~ Anonymní uživatel
2 příspěvky
3. 10. 2012   #7
-
0
-

#2 liborb
dikes   o tych metodach get a set viem, len neviem ako sa odkazat na tu premennu v inej triede: 

Mam 2 triedy, Monitor a Pocitac 

 

public class Monitor() {

private String nazov;

private int cena;



public Monitor(String nazov, int cena){

this.nazov = nazov;

this,cena = cena;

    }

public String getNazov(){

return nazov;

    }

}

public class Pocitac () {

private nazovpc;



public Pocitac(String nazovpc){

this.nazovpc = nazovpc;

}

public String toString(){

return "nazov pc " +  nazovpc + " a nazov monitoru " + ..... ; //ako tu dostanem ten nazov monitoru z triedy monitor

}

}


ak su v kode niekde chyby tak to ignoruj, chcel som len presne ukazat ze ako to potrebujem urobit :}

Nahlásit jako SPAM
IP: 2001:718:1e02:8144::bead:...–
liborb
~ Redaktor
+18
Guru
3. 10. 2012   #8
-
0
-

Buď máš počítač a monitor, které tvoří třeba počítačovou sestavu a pak ještě potřebuješ 3. třídu, která bude obsahovat instance třídy Monitor a Počítač.

Nebo se  řekne, že Počítač je ten celý komplet a tudíž obsahuje monitor a tudíž musí třída Počítač obsahovat instanci třídy Monitor.

Nahlásit jako SPAM
IP: 90.181.216.–
sleepy0
Stálý člen
4. 10. 2012   #9
-
0
-

#7 miros47
To class Pocitac vobec nevie co je to monitor ako sa s nim pracuje a ci vobec nieco take existuje. Jednoducho ty mu ho musis nejako "ukazat" a povedat mu co s nim ma robit. Napr. takto ale neber si z toho priklad:
 

class Pocitac{
	// premenne ktore tam mas ale este navyse
	private Monitor monitorPC

	// metody ktore mas

	// seter a geter pre monitor
	public void pridajMonitor(Monitor monitor){
		this.monitorPC = monitor;
	}
	// podobne getter
	
	// a teraz mozes napriklad napisat toString a tam kde mas .... napises this.monitorPC
}

Alebo ho mozes pridat priamo v konstrukotre, odkazat nan z nejakej statickej premennej ktora je pristupna aj pocitacu a to takmer vzdy (to je to pred cim som ta vystrihal), alebo ine omnoho rafinovanejsie a narocnejsie sposoby, ale potom sa to aspon lepsie cita.

Nahlásit jako SPAM
IP: 158.195.195.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

Podobná vlákna

Komunikácia s webovou DB — založil Binary Ranger

Komunikácia s webovou DB — založil Binary Ranger

Komunikacia zariadenia s RS232 — založil nero150

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý