Java - problem sa instancom

poruka: 6
|
čitano: 2.342
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
13 godina
neaktivan
offline
Java - problem sa instancom

Radi se o zadatku 1.2. s ovog linka https://www3.ntu.edu.sg/home/ehchua/programming/java/J3f_OOPExercises.html#zz-1.2

 

A class called Author is designed as shown in the class diagram. It contains: Three private instance variables: name (String), email (String), and gender (char of either 'm' or 'f'); One constructor to initialize the name, email and gender with the given values; A class called Book is designed as shown in the class diagram. It contains: Four private instance variables: name (String), author (of the class Author you have just created, assume that each book has one and only one author), price (double), and qtyInStock (int); Two constructors: public Book (String name, Author author, double price) {...} public Book (String name, Author author, double price, int qtyInStock) {...}

 

Sve klase se nalaze u istom paketu, jedina greska koju javlja se nalazi u zeleno oznacenom redu i javlja "Cannot instantiate the type Book". Ako je bitno, koristim Eclipse na Windowsu. Googlao sam, ali bezuspjesno. Nije ni apstraktna klasa niti interface i nalazi se u istom paketu s ostalima. Ja nemam ideja vise. Dolje se nalazi sav kod. Hvala :)

Glavna funkcija 

public class TestAuthor {

 

 public static void main(String[] args) {

 Author a1 = new Author("George Orwell", "orwell@example.com", 'm');

 System.out.println(a1);   // calls toString()

 a1.setEmail("paul@nowhere.com");

 System.out.println(a1);

 

 Book book1 = new Book("1984", a1, 29.99, 3);

 }

}

 

Author.java

 public class Author {

 private String name;

 private String email;

 private char gender;

 

 public Author(String name, String email, char gender) {

 this.name = name;

 this.email = email;

 this.gender = gender;

 }

 

 // getters

 public String getName() {

 return name;

 }

 

 public String getEmail() {

 return email;

 }

 

 public char getGender() {

 return gender;

 }

 

 // setters

 public void setEmail(String email) {

 this.email=email;

 }

 

 // toString returning "author-name (gender) at email", e.g., "Tan Ah Teck (m) at ahTeck@somewhere.com".

 public String toString() {

 return (name + " (" + gender + ") at " + email );

 }

}

 

I Book.java

 public class Book<Author> {

 private String name;

 private Author author;

 private double price;

 private int qtyInStock;

 

 public Book(String name, Author author, double price) {

 this.name = name;

 this.author = author;

 this.price = price;

 qtyInStock=0;

 }

 

 

 public Book(String name, Author author, double price, int qtyInStock) {

 this.name = name;

 this.author = author;

 this.price = price;

 this.qtyInStock = qtyInStock;

 }

 

 

 public String getName() {

 return name;

 }

 

 public Author getAuthor() {

 return author;

 }

 

 public double getPrice() {

 return price;

 }

 

 public int getQtyInStock() {

 return qtyInStock;

 }

 

 public String toString() {

 return (this.name + " by " + author.toString());

 } 

}

Poruka je uređivana zadnji put pet 4.10.2013 22:01 (Rattner).
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Java - problem sa instancom

Hmmm,  nisam bas isprobao sve, ali cini mi se da je problem dvojak:

1. Template parametar (Book<Author>) ti se zove isto kao i klasa Author

2. Kad instanciras knjigu, instanciras je bez template parametra

 

Mislim da je dovoljno ukloniti 'class Book<Author>' i zamjeniti sa 'class Book' i sve bi trebalo stimati.

 

 

P.S. Ovo je, btw, poprilicno retardirana upotreba generika.

P.S.2 Sad sam pogledao taj tutorial nabrzaka - ni oni ne dodaju genericki parametar, to si ti sam eksperimentirao nesto?

So I ran faster, but it caught me here.... yes, my loyalties turned... like my ankle, in a seventh grade...
Poruka je uređivana zadnji put pet 4.10.2013 22:26 (Deus ex machina).
13 godina
neaktivan
offline
Re: Java - problem sa instancom

Kada je istanciram bez template parametra, u definiciji klase mi javlja "Author cannot be resolved to a type" na svim mjestima gdje se Author spominje. Kada u Eclipseu kliknem na taj error ponudi mi nekoliko opcija od kojih je jedna "Add type parameter 'Author' to 'Book'. I onda on sam doda taj template parametar i error je rijesen, nisam ga ja rucno tamo stavio.

I sta tocno mislis pod "retardirana upotreba generika"? 

17 godina
offline
Re: Java - problem sa instancom

Evo kopirao sam sve tvoje klase u Eclipse na Windowsima,

s tim da nisam stavio Author kao template prametar u klasu Books, i dodao još jedan ispis u TestAuthor, i to sasvim normalno radi.

 

konzola konzola
Poruka je uređivana zadnji put pet 4.10.2013 23:34 (Jack).
13 godina
neaktivan
offline
Java - problem sa instancom

Problem je bio u tome sto su sve klase nalazile u defaultnom paketu. Prebacio sam ih sve u novi paket, dodao na pocetak svake ime paketa i uklonio template parametar. Sada radi sve.

Poruka je uređivana zadnji put pet 4.10.2013 23:49 (Rattner).
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Java - problem sa instancom

Yes, obicno ako ti javi "Type definition not found" - zaboravio si na import.

 

Sto se tice generika - genericki parametar je bijedna sjena template mehanizma iz C++a, no u pravilu se koristi kad zelis odredjenu klasu prilagoditi raznolikim tipovima na nacin da izbjegnes castanje. U pravilu bi to trebalo biti dopusteno i tipovima koji ne dijele istog roditelja, no mislim da je to u Javi nemoguce.

Svaka kolekcija je, primjerice, idealan konstrukt za tipiziranje po generiku, jer skoro sve metode kolekcija rade upravo s tvojim tipom - add(T t), remove(T t), find(T t) i slicno.

 

Dakle, u ovom slucaju, s obzirom da je Autor vec definiran kao klasa, i unutar Book ne koristis nista sto Autor vec nema - nema smisla tipizirati Book po nekom parametru, kad iovako ionako ne mozes zamjeniti Autora. Za sto bi drugo vezao Book?

So I ran faster, but it caught me here.... yes, my loyalties turned... like my ankle, in a seventh grade...
Poruka je uređivana zadnji put sub 5.10.2013 2:13 (Deus ex machina).
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice