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
Fórum › Java
Java komunikacia tried(noob)
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).
#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());
}
}
}
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);
}
}
#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());
}
}
#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 :}
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.
#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.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Komunikácia s webovou DB — založil Binary Ranger
Komunikácia s webovou DB — založil Binary Ranger
Komunikacia cmd s delphi? — založil ha2
Komunikacia zariadenia s RS232 — založil nero150
Komunikacia cez RS232 (COM port) — založil atsip
Moderátoři diskuze