Generics mit Array funzt net ;(

Status
Nicht offen für weitere Antworten.
V

verzweifelter42

Gast
uff..ich sitze schon den halben tag dran und weiß bei dem problem nicht mehr weiter! warum klappt das generic nicht mir arrays ? gibts da sonderformen?
hier mein code:


class Array<T>
{
T[] a = new T [10];

T get(int i)
{
return a;
}



}

public class Test
{
public static void main(String[] args)
{
Array<int> a = new Array<int>();

a.get(1);

}
}



Danke im Vorraus
 
V

verzweifelter23

Gast
hier nochmal etwas besser hingeschrieben


Code:
class Array<T>
{
       T[] a = new T [10];

        T get(int i)
        {
               return a[i];
         }
}

public class Test
{
         public static void main(String[] args)
         {
              Array<int> a = new Array<int>();

               a.get(1);

           }   
}
 

Waldbeere

Mitglied
Hi,

wenn Du Objekte erstellen willst, brauchst Du auch ne konkrete Klasse dafür.
In dem Fall den Du hast musst Du einfach von Object auf T casten.

Code:
T[] a = (T[])new Object[10];

Und bei der Initialisierung in der main-Methode musst Du als Typ Objekte übergeben.

Also aus:

Code:
Array<int> a = new Array<int>();

wird

Code:
Array<Integer> a = new Array<Integer>();
 
V

verzweifelter23

Gast
hallo leute! hab schon wieder ein problem mit generics:

Code:
public class Array<T>
{
	public T []ar =(T[]) new Object[10];
	
	public void add(T zeichen)
	{
		ar[0]= zeichen;
		
	}
	



	public static void main(String[] args)
	{
		
		Array<Integer> k = new Array<Integer>();
	
		k.add(2);

		Out.println(k.ar[0]);
          }
}


hier erscheint keine Ausgabe auf der Konsole( es müsste die zahl 2 ausgegeben werden!) und es kommt immer wieder zur folgenden fehlermeldung:
exception in thread " main" java.lang.ClassCastException:[Ljava.lang.Object; ar Array.main


was habe ich nur Falsch gemacht ;([/code]
 

Waldbeere

Mitglied
Ich weiss nicht genau warum das passiert, aber verhindern kannst Du das indem Du einen
getter dafür nimmst. Du solltest sowieso auf Variablen nur über Methoden zugreifen. Daher
mach die Methode private und schreib einen getter, sowie da unten, dafür.

Code:
public class Array<T> {
    
    private T[] ar = (T[]) new Object[10];

    public void add(T zeichen) {
        ar[0] = zeichen;

    }
    
    public T getValue() {
        return ar[0];
    }

    public static void main(String[] args) {

        Array<Integer> k = new Array<Integer>();

        k.add(2);

        System.out.println(k.getValue());
    }
}

Schau Dir mal Listen an, die sind angenehmer und eleganter als Arrays.
 

Marco13

Top Contributor
Die Gründe dafür kann man hier nachlesen ...
http://www.angelikalanger.com/Gener...ncrete instantiation of a parameterized type?
es geht da die Typsicherheit verloren ... ist ein bißchen kompliziert.

Abhilfen... Stehen u.a. hier http://www.angelikalanger.com/Articles/JavaSpektrum/34.GenericCreation/34.GenericCreation.html

Eine davon wäre in diesem Fall vielleicht sowas wie
Code:
public class Array<T>
{
   public T []ar;


   public Array(Class<T> containedClass)
   {
       ar = (T[]) java.lang.reflect.Array.newInstance(containedClass, 10);
   }
   public void add(T zeichen)
   {
      ar[0]= zeichen;
   }

   public static void main(String[] args)
   {

      Array<Integer> k = new Array<Integer>(Integer.class);

      k.add(2);

      System.out.println(k.ar[0]);
   }
}

Aber trotz allem sollte 'ar' private sein, wie es Waldbeere schon gesagt hat!
 
B

Beni

Gast
Nimm doch einfach einen Object-Array anstelle des T-Arrays, und caste in einer "T get( int index )"-Methode auf T. So macht das auch die ArrayList in der Standard-Library.
 
B

Beni

Gast
Ne, ich meine nicht was Waldbeere macht.
Ich meine sowas:
Code:
private Object[] data = ...

public T get( int index ){
  return (T)data[ index ];
}

public void set( int index, T value ){
  data[ index ] = value;
}

Der andere Vorschlag ist gefährlich wie dieses Beispiel zeigt:
Code:
class Array<T>{
  private T[] data = (T[])new Object[ 5 ];
  public T[] getAll(){
    return data;
  }
}
Code:
Array<String> string = new Array<String>();

// hier gibt es keinen Compilerfehler...
String[] data = string.getAll();
// ... aber zur Laufzeit explodiert es hier
 

Marco13

Top Contributor
Hm.... ???:L nagel' mich darauf jetzt nicht fest, aber....
Code:
class Foo<T>
{
    private Object[] data = new Object[5];

    public T get( int index )
    {
      return (T)data[ index ];
    } 
}
und
Code:
class Bar<T>
{
    private T[] ar = (T[]) new Object[10];

    public T get(int index) 
    {
        return ar[index];
    } 
}
sind glaubich in bezug auf die get-Methode äquivalent - d.h. bei der zweiten wird auch nur (vom Compiler) ein cast vor dem return IN (!) der get-Methode eingesetzt. Aber.... da müßte man sich vielleicht mal den bytecode ansehen...
 
B

Beni

Gast
Denke auch, dass die beiden dasselbe ergeben. Aber darum ging es mir nicht, nur dass ein "T[] new Object[10]" potentiell mehr Schaden anrichten kann sollte man jemals direkt mit dem Array arbeiten wollen.
 

Marco13

Top Contributor
Ja, das stimmt schon - außer wenn man es mit Arrays.newInstance erzeugt (wie es auch bei ArrayList#toArray(T[]) gemacht wird), aber das ist ja u.U. hier nicht erwünscht...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Array Generics Java Basics - Anfänger-Themen 3
C Generics Array Java Basics - Anfänger-Themen 43
S Generics Generisches Array Java Basics - Anfänger-Themen 10
H Generics machen mich verrückt Java Basics - Anfänger-Themen 8
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
MarvinsDepression Datentypen Generics: Erste Berührungen Java Basics - Anfänger-Themen 6
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
Cassy3 Generics - CompareTo Java Basics - Anfänger-Themen 21
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
districon Generics implementieren Java Basics - Anfänger-Themen 2
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Hilfe bei Generics Java Basics - Anfänger-Themen 11
G Generics Compilerfehler Java Basics - Anfänger-Themen 6
G Generics Methoden Java Basics - Anfänger-Themen 7
G Generics Java Basics - Anfänger-Themen 3
L Generics Tripel Java Basics - Anfänger-Themen 26
W Fragen zu Generics Java Basics - Anfänger-Themen 14
S Hilfe. Generics und BiFunctions Java Basics - Anfänger-Themen 10
X Wie Generics richtig benutzen ? Java Basics - Anfänger-Themen 5
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Java Generics factory method Java Basics - Anfänger-Themen 2
M Verständnisfrage zu Generics Java Basics - Anfänger-Themen 7
I Generics und Comparable Java Basics - Anfänger-Themen 14
G Generics mit ? und Diamantoperator Java Basics - Anfänger-Themen 4
G Generics: Wildcard ? Java Basics - Anfänger-Themen 12
D Generics methode Java Basics - Anfänger-Themen 2
I Frage zu Generics und Wildcards Java Basics - Anfänger-Themen 2
N Generics und Casting eines Objekts Java Basics - Anfänger-Themen 1
A Generics Java Basics - Anfänger-Themen 6
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
W Generics - Typ zurückbekommen Java Basics - Anfänger-Themen 4
Dimax Erste Schritte Generics von Profis leicht erklärt Java Basics - Anfänger-Themen 7
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
J Collections Generics: Typ wird nicht erkannt Java Basics - Anfänger-Themen 7
D Generics ArrayList: Bug im Quellcode Java Basics - Anfänger-Themen 14
C Generics Java Basics - Anfänger-Themen 8
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
T Generics in Java... Java Basics - Anfänger-Themen 9
J Generics Java Basics - Anfänger-Themen 3
J Generics Datentypen vergleichen Java Basics - Anfänger-Themen 16
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
O Generics - Implementierung Java Basics - Anfänger-Themen 7
Shizmo Frage zu Generics Java Basics - Anfänger-Themen 3
F Multiple Generics Java Basics - Anfänger-Themen 10
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
H Typsicherheit/Generics Java Basics - Anfänger-Themen 1
U Java generics funktioniert nicht Java Basics - Anfänger-Themen 0
Tarrew Generics: Erste gemeinse Oberklasse als Rückgabewert Java Basics - Anfänger-Themen 1
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Generics Java Basics - Anfänger-Themen 4
M Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
R Compiler-Fehler Generics Problem Java Basics - Anfänger-Themen 2
K Interface Generics, Interfaces und Listen - ich bin verwirrt. Java Basics - Anfänger-Themen 7
K Generics bei Klassen- und Interfacedeklarationen Java Basics - Anfänger-Themen 3
D toArray und Generics Java Basics - Anfänger-Themen 2
D Zwei Generics beim Überladen von Methoden Java Basics - Anfänger-Themen 3
C Erste Schritte Filter für Generics oder ähnliches Java Basics - Anfänger-Themen 2
M Frage zu Generics-Deklaration Java Basics - Anfänger-Themen 5
S Frage zu Collection-Generics in Subklassen Java Basics - Anfänger-Themen 6
J Java Generics - Frage zu Types Java Basics - Anfänger-Themen 2
M <T> Generics Java Basics - Anfänger-Themen 7
B Interface Generics: prüfen ob Interface deklariert wird Java Basics - Anfänger-Themen 18
T Polymorphie Generics-Problem Java Basics - Anfänger-Themen 2
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Generics casten Java Basics - Anfänger-Themen 14
J Generics wildcard Java Basics - Anfänger-Themen 6
E Listen und Generics Java Basics - Anfänger-Themen 9
X Generics Java Basics - Anfänger-Themen 6
M Datei einlesen mit generics? Java Basics - Anfänger-Themen 9
D Warum sind Generics mit Vorsicht zu genießen? Java Basics - Anfänger-Themen 6
M OOP Mit Generics auf Methoden zugreifen? Java Basics - Anfänger-Themen 10
S Generics Java Basics - Anfänger-Themen 4
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
L Datentypen Problem mit Generics und null Java Basics - Anfänger-Themen 6
E Klassen java.util.ArrayList<E> als Generics Java Basics - Anfänger-Themen 16
W Interface Problem mit Generics Java Basics - Anfänger-Themen 2
M OOP Generics und Wildcards Java Basics - Anfänger-Themen 3
D Generics - Warnmeldungen Java Basics - Anfänger-Themen 2
M Polymorphie generics einsteigerprobleme Java Basics - Anfänger-Themen 3
D Vererbung Generics und Vererbung Java Basics - Anfänger-Themen 8
D Fehler mit generics Java Basics - Anfänger-Themen 10
S Generics - CaseInsensitiveMap selber schreiben? Java Basics - Anfänger-Themen 5
K Datentypen Generics Java Basics - Anfänger-Themen 3
P Comparable und Generics Java Basics - Anfänger-Themen 6
I Generics (Subtypen) Java Basics - Anfänger-Themen 17
N Typeinschränkung bei Generics Java Basics - Anfänger-Themen 13
C Generics und Cast Java Basics - Anfänger-Themen 5
H Generics werden in -source 1.2 nicht unterstützt Java Basics - Anfänger-Themen 16
M Datentypen Generics: Exacten Typ ermitteln Java Basics - Anfänger-Themen 6
N Generics und Interfaces Java Basics - Anfänger-Themen 5
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
lumo Java Generics Java Basics - Anfänger-Themen 19
M verlinkte Liste mit generics Java Basics - Anfänger-Themen 7
capgeti Datentypen Static methoden aus Superklasse mit Generics definieren? Java Basics - Anfänger-Themen 9
S Generics und Typerkennung Java Basics - Anfänger-Themen 7
A Cast ohne Warnung bei Generics Java Basics - Anfänger-Themen 2
B Java Listen und Generics Java Basics - Anfänger-Themen 35

Ähnliche Java Themen

Neue Themen


Oben