Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.05.2007, 11:08

Generics in java

Hallo:),


ich hab ein rpoblem mit nem javaübungsprogramm, was ich schreiben muss :D

es geht hierbei um generics und hauptsächlich - denk ich- um das problem mit den generic arrays. schaut euch mal bitte folgenden code an.

C-/C++-Quelltext

1
2
3
4
5
6
7
/** Class : GenericShelve
 * @purpose : - a generic shelve for the different objects */
class GenericShelve<T extends Shelveobject>
{
    // Membervariables

    private T[] GenericObjects = (T[]) new Object[5];
}


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
/** Class : Shelve
 * @purpose : - test the shelveclass */
public class Shelve
{
    public static void main(String [] args)
    {
        // Variables

        GenericShelve<Book> BookShelve = new GenericShelve<Book>(); // Bookshelve

        Book Book1 = new Book("Testbuch", "Niemand");               // a book

        
        BookShelve.putObject(Book1, 0);
    }
}


und da bekomm ich folgenden fehler.

Zitat

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
at GenericShelve.<init>(Shelve.java:142)
at Shelve.main(Shelve.java:185)


wenn ich jedoch das interface (Shelveobject) nicht implementiere funktioniert es. jedoch brauch ich das interface, um auf die funktion printInfo zuzugriefen, die jedes objekt im regal hat.

kann mir da bitte jemand helfen ?:(

mfg
Drac


edit: k da wo meine vermutung lag, daran lags auch^^

habs etz gefunden, es muss so heißen

C-/C++-Quelltext

1
private T[] GenericObjects = (T[]) new Shelveobject[5];

2

27.05.2007, 12:35

das ist aber in der Verwendung sehr fehler anfällig! Da man auch Typen übergeben kann die nichts mit einem ShelveObject zu tun haben!
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

3

27.05.2007, 16:20

jo is klar, aber afaik ist das doch die einzige möglichkeit ein generic array zu machen?

bei den unifolien steht jedenfalls, dass da halt mit einem fehler bzw. einer warnung kompiliert wird(in eclipse wird sie permanent angezeigt),dass es eben nicht typsicher ist.

aber ist nurn kleines testbeispiel:P kann also nicht gewaltig viel falsch passieren, außer ich bau scheissE:P

4

27.05.2007, 17:22

wenn du in der Methode doch sowieso nur ein Shelve objekt erwartest oder eins das von Shelve abgeleitet wurde wofür brauchst du dann Generics?


Dann kannste doch doch genauso gut gleich überall ShelveObject schreiben!
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

5

27.05.2007, 17:58

Jo, Theprogrammer hat Recht. Generics in Java werden ganz anders verwendet als in C++. Fuer deine Zwecke reicht es einfach ein Shelveobject-Array zu erzeugen.

Den einzigen Vorteil den ich bisher in Java-Generics gefunden habe ist die Moeglichkeit den unbekannten Typ T als Klasse zu verwenden. Wenn zu z.B. sowas machen willst:

C-/C++-Quelltext

1
public T getElementAt(int i){return genericObjects[i];}

Man spart sich also ein wenig Casten.
"Have you tried turning it off and on again?"

6

28.05.2007, 13:00

naja übungsaufgabe war es aber generics zu verwenden :P da kann ich dann bei der präsentation kaum sagen:

"tja generics bringens bei mir aber nicht, deswegen hab ich die aufgabe einfach ohne generics gelöst"

wird der übungsleiter nicht erfreut sein^^

ne aber ohne dem interface shelveobject könnte ich dann kein book,winebottle,disc etc shelve machen :D das interface dient ja nur dazu, dass ich ne printinfo funktion habe.

Werbeanzeige