Przekazanie referencji obiektu - pytanie

0

Witam wszystkich forumowiczów.

Mam do Was pytanie związane z nauką Javy. Obecnie studiuję książkę "Java w 21 dni" autorstwa Rogers Cadenhead. Jakiś czas temu natknąłem się na temat przekazywania referencji obiektów do tablicy. Wszystko dla mnie jest zrozumiałem poza jednym. Dlaczego podczas wywoływania metody zwracającej referencję z tablicy musimy stosować nawias z nazwą klasy (Item) z której to obiekt został utworzony?

 public Item getItem(int i) {
        return (Item) catalog.get(i);
 }

Dziękuję za jakiekolwiek odpowiedz. Pozdrawiam

0

Jak wygląda deklaracje tablicy catalog?
Najlepiej cały kod wklej :)

0

Dziękuję za odpowiedź, wklejam kod wszystkich trzech klas:

public class Storefront {
    private LinkedList catalog = new LinkedList();

    public void addItem(String id, String name, String price,
        String quant) {

        Item it = new Item(id, name, price, quant);

        catalog.add(it);         
    }

    public Item getItem(int i) {
        return (Item) catalog.get(i);
    }
    
   

    public int getSize() {
        return catalog.size();
    }
   

    public void sort() {
        Collections.sort(catalog);
    }
}
public class Item implements Comparable {
    private String id;
    private String name;
    private double retail;
    private int quantity;
    private double price;

    Item(String idIn, String nameIn, String retailIn, String qIn) {
        id = idIn;
        name = nameIn;
        retail = Double.parseDouble(retailIn);
        quantity = Integer.parseInt(qIn);

        if (quantity > 400)
            price = retail * .5D;
        else if (quantity > 200)
            price = retail * .6D;
        else
            price = retail * .7D;
        price = Math.floor( price * 100 + .5 ) / 100;
    }

    public int compareTo(Object obj) {
        Item temp = (Item) obj;
        if (this.price < temp.price) {
            return 1;
        } else if (this.price > temp.price) {
            return -1;
        }
        return 0;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public double getRetail() {
        return retail;
    }

    public int getQuantity() {
        return quantity;
    }

    public double getPrice() {
        return price;
    }
}
public class GiftShop {
   public static void main(String[] arguments) {
        Storefront store = new Storefront();
        store.addItem("C01", "KUBEK", "9.99", "150");
        store.addItem("C02", "DUŻY KUBEK", "12.99", "82");
        store.addItem("C03", "PODKĹADKA", "10.49", "800");
        store.addItem("D01", "KOSZULKA", "16.99", "90");
        store.sort();

        for (int i = 0; i < store.getSize(); i++) {
            Item show = (Item) store.getItem(i);
            System.out.println("\nIdentyfikator elementu: " + show.getId() +
                "\nNazwa: " + show.getName() +
                "\nCena sprzedaĹĽy: " + show.getRetail() + " zł‚" +
                "\nCena: " + show.getPrice() + " zł‚" +
                "\nSztuk: " + show.getQuantity());
        }
        
      
    }
}
5

Wyjaśnienie. Książka pochodzi z antykwariatu i opowiada o pradawnej javie. Wersja najpóźniej 1.4 - czyli rok 2004.
Tak teraz nikt w javie raczej ( w ten sposób ) nie pisze.
O ile nie chcesz zostać archeologiem, tylko po prostu programistą to znajdź coś nowszego.

0
jarekr000000 napisał(a):

Wyjaśnienie. Książka pochodzi z antykwariatu i opowiada o pradawnej javie. Wersja najpóźniej 1.4 - czyli rok 2004.
Tak teraz nikt w javie raczej ( w ten sposób ) nie pisze.
O ile nie chcesz zostać archeologiem, tylko po prostu programistą to znajdź coś nowszego.

Dziękuję za odpowiedź. To może trochę inaczej.
Dlaczego kod

public Item getItem(int i) {
       return catalog.get(i);
   }

zgłasza błąd.

Przy kodzie:

 public Item getItem(int i) {
        return (Item) catalog.get(i);
    }

wszystko się kompiluje.

Różnicą w tych dwóch podanych kodach jest (Item) zawarte przed catalog.get(i);
Przecież w instrukcji return catalog.get(i); zwracamy referencję obiektu stworzonego na podstawie Item, to dlaczego kompilator zgłasza błąd i wymusza na programiście dodanie (Item) przez tą instrukcją?

0
addamos91 napisał(a):
jarekr000000 napisał(a):

Wyjaśnienie. Książka pochodzi z antykwariatu i opowiada o pradawnej javie. Wersja najpóźniej 1.4 - czyli rok 2004.
Tak teraz nikt w javie raczej ( w ten sposób ) nie pisze.
O ile nie chcesz zostać archeologiem, tylko po prostu programistą to znajdź coś nowszego.

Dziękuję za odpowiedź. To może trochę inaczej.
Dlaczego kod

public Item getItem(int i) {
       return catalog.get(i);
   }

zgłasza błąd.

Przy kodzie:

 public Item getItem(int i) {
        return (Item) catalog.get(i);
    }

wszystko się kompiluje.

Różnicą w tych dwóch podanych kodach jest (Item) zawarte przed catalog.get(i);
Przecież w instrukcji return catalog.get(i); zwracamy referencję obiektu stworzonego na podstawie Item, to dlaczego kompilator zgłasza błąd i wymusza na programiście dodanie (Item) przez tą instrukcją?

Kolekcje w Javie przed 5 przechowują i zwracają referencje typu Object. (Polimorfizm) Musisz zrzutować referencje na dół(downcasting). Przy pierwszej definicji metody zwracasz Object, a nie Item, dlatego kompilator słusznie się burzy. Drugie rzutowanie w klasie która wywołuje tą metodę już jest redundantne.

Nigdzie raczej nie stosuje się Javy sprzed 5. Wprowadziłą generyki(lub, jak to Helion, o zgrozo nazwał "typy ogólne" xd), które zmieniają postać rzeczy. I to było z 15 lat temu.

0
addamos91 napisał(a):
jarekr000000 napisał(a):

Wyjaśnienie. Książka pochodzi z antykwariatu i opowiada o pradawnej javie. Wersja najpóźniej 1.4 - czyli rok 2004.
Tak teraz nikt w javie raczej ( w ten sposób ) nie pisze.
O ile nie chcesz zostać archeologiem, tylko po prostu programistą to znajdź coś nowszego.

Dziękuję za odpowiedź. To może trochę inaczej.
Dlaczego kod

public Item getItem(int i) {
       return catalog.get(i);
   }

zgłasza błąd.

Przy kodzie:

 public Item getItem(int i) {
        return (Item) catalog.get(i);
    }

wszystko się kompiluje.

Różnicą w tych dwóch podanych kodach jest (Item) zawarte przed catalog.get(i);
Przecież w instrukcji return catalog.get(i); zwracamy referencję obiektu stworzonego na podstawie Item, to dlaczego kompilator zgłasza błąd i wymusza na programiście dodanie (Item) przez tą instrukcją?

Ponieważ powinno być List<Item> list = new LinkedList<>(); lub LinkedList<Item> list = new LinkedList<>();
Kup ksiązke o conajmniej Javie 8...
Jaką obecnie ksiązke masz?

0
scibi92 napisał(a):
addamos91 napisał(a):
jarekr000000 napisał(a):

Wyjaśnienie. Książka pochodzi z antykwariatu i opowiada o pradawnej javie. Wersja najpóźniej 1.4 - czyli rok 2004.
Tak teraz nikt w javie raczej ( w ten sposób ) nie pisze.
O ile nie chcesz zostać archeologiem, tylko po prostu programistą to znajdź coś nowszego.

Dziękuję za odpowiedź. To może trochę inaczej.
Dlaczego kod

public Item getItem(int i) {
       return catalog.get(i);
   }

zgłasza błąd.

Przy kodzie:

 public Item getItem(int i) {
        return (Item) catalog.get(i);
    }

wszystko się kompiluje.

Różnicą w tych dwóch podanych kodach jest (Item) zawarte przed catalog.get(i);
Przecież w instrukcji return catalog.get(i); zwracamy referencję obiektu stworzonego na podstawie Item, to dlaczego kompilator zgłasza błąd i wymusza na programiście dodanie (Item) przez tą instrukcją?

Ponieważ powinno być List<Item> list = new LinkedList<>(); lub LinkedList<Item> list = new LinkedList<>();
Kup ksiązke o conajmniej Javie 8...
Jaką obecnie ksiązke masz?

Java w 21 dni - Rogers Cadenhead, Wydanie VII

0

@addamos91
Ok, no w sumie wspominałeś. Na której stronie jesteś? Bo z tego co widze ta ksiązka ma kijowy rozkład materiału, generyki sa za późno...
Polecam taką ksiązke:
https://helion.pl/ksiazki/java-podstawy-wydanie-x-cay-s-horstmann,javp10.htm#format/d
Chociaż najlepiej po angielsku, bo tłumaczenia książek do Javy dają raka...

I nie cytuj całego posta jeśli masz go powyżej!

0

Aktualnie jestem na 173 stronie.

Dziękuję za odpowiedzi, Scibi92 sprawdzę tą książkę. Pozdrawiam

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