Generics und Arrays

Status
Nicht offen für weitere Antworten.

my_key

Mitglied
hallo,

folgendes problem: ein konstruktor erhält als parameter ein array mit einem beliebigen typ. ich kriegs einfach nicht hin. mit dem typ object als parameter würde es ja gehen aber das wäre ja dann zu unsicher.. ich suche also eine Lösung mit generics

Vereinfacht siehts so aus:
Java:
public klasse<E> {
	private E[] el;

	public klasse(???) {
		this.el = ???
	}
}

was genau muss ich anstatt den fragezeichen schreiben?

grüße,
michael
 

Landei

Top Contributor
Beispiel von Using Java Reflection , allerdings noch ungenerisch:
Java:
   import java.lang.reflect.*;
        
   public class array1 {
      public static void main(String args[])
      {
         try {
            Class cls = Class.forName(
              "java.lang.String");
            Object arr = Array.newInstance(cls, 10);
            Array.set(arr, 5, "this is a test");
            String s = (String)Array.get(arr, 5);
            System.out.println(s);
         }
         catch (Throwable e) {
            System.err.println(e);
         }
      }
   }

Danach wäre dein Beispiel (ungetestet):
Java:
public klasse<E> {
    private E[] el;
 
    public klasse(Class<E> clazz, int length) {
        this.el = (E[]) (Array.newInstance(clazz, length));
    }
}

Wenn du ein E hast, kannst du davon die Klasse mit e.getClass() ermitteln.
 
M

maki

Gast
Array und Generics passen nicht wirklich zusammen, wenn du garantieren kannst dass nur die richtigen Instanzen ins Array kommen, eignen sich lokale SuppressWarnings Annotationen und Casts.
 

mrbela

Bekanntes Mitglied
ich verstehe Dein Problem nicht ganz...

Du musst das Array instanzieren im Konstruktor. Da Du ja nur hast

Java:
public klasse<E> {
    private E[] el;

Um ein Array instanzieren zu können brauchst Du eine Größe. zB wär ne Lösung:

Java:
public klasse<E> {
    private E[] el;
 
    public klasse(int size) {
        this.el = new E[size];
    }
}

Wenn die Größe beliebig sein soll, bietet sich eine ArrayList, oder ein Vector an.

btw: Der Typ vom Array ist ja E. Wenn Du Deine Klasse instanzierst, dann musst Du den typ ja mit angeben.

vlg, armin
 

my_key

Mitglied
Danke ersteinmal für eure antworten

ich muss leider sagen dass wenn ich mit
Java:
klasse(new double[] { 1.9, 2.9 }, 2);
ich trotzdem ein type missmatch bekomme weil ja Array nicht gleich Class ist. dass ich da noch die länge angeben muss ist auch nicht grad schön (aber damit könnte man ja leben)


-------------------------------------------




was ich aber komisch finde:
Java:
ArrayList<int []> ee = new ArrayList<int []>();
ee.add(new int[] {1,2});
das heißt arrays und generics passend doch irgendwie zusammen.


ich hab die klasse ArrayList kopiert um sie bearbeiten zu können, ich hab ihr einen weiteren konstruktor dazugeschreiben. Dieser konstruktor verlangt einen objekt vom typ den man beim instanzieren als generic angibt.
Java:
// Arr = ArrayList
public class Arr<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
    //....
    public Arr(E o) {
	
    }
    //....
}

und tatsächlich, es funktioniert:
Java:
public static void main(String[] args) {
	Arr<String[]> e = new Arr<String[]>(new String[] { });
	Arr<int[]> ed = new Arr<int[]>(new int[] { });
}

jetzt ich bin nun am versuchen diesen code für mein programm anzupassen...
 

my_key

Mitglied
ich verstehe Dein Problem nicht ganz...

Du musst das Array instanzieren im Konstruktor. Da Du ja nur hast

Java:
public klasse<E> {
    private E[] el;

Um ein Array instanzieren zu können brauchst Du eine Größe. zB wär ne Lösung:

Java:
public klasse<E> {
    private E[] el;
 
    public klasse(int size) {
        this.el = new E[size];
    }
}

Wenn die Größe beliebig sein soll, bietet sich eine ArrayList, oder ein Vector an.

btw: Der Typ vom Array ist ja E. Wenn Du Deine Klasse instanzierst, dann musst Du den typ ja mit angeben.

vlg, armin

Was ich wollte war eigentlich ein array im konstruktor zu übergeben:
Java:
public klasse<E> {
    private E[] el;
 
    public klasse(beliebigerTyp[] x) {
        this.el = x; // <<-- Oder so ähnlich
    }
}
 
G

Gelöschtes Mitglied 5909

Gast
Ich versteh dein Problem nicht? ^^

Java:
package de.test;

import java.util.Arrays;

public class ArrayFun<T> {

    T[] ts;

    public ArrayFun( T[] t ) {
        ts = t;
    }

    public static void main( String[] args ) {
        ArrayFun<Integer> af = new ArrayFun<Integer>(new Integer[] { 1, 2, 3 });
        System.out.println(Arrays.toString(af.ts));
    }
}
 

my_key

Mitglied
so also für die equals methode brauch ich noch eine methode die abfragt ob Object o ein Array ist, wie mache ich das? Ich habs derweil mit try catch gemacht :)


Java:
import java.util.Arrays;
public class ArrayFun<T> {
    T[] ts;
    public ArrayFun( T[] t ) {
        ts = t;
    }

	@Override
	public boolean equals(Object o) {
		if (o instanceof ArrayFun) {
			//....
		}
		
		if () { // <-- Abragen ob o ein Array ist?
			Object[] oo = (Object[]) o;
			//...
		}
		
		return false;
	}
 

xerberuz

Bekanntes Mitglied
so also für die equals methode brauch ich noch eine methode die abfragt ob Object o ein Array ist, wie mache ich das? Ich habs derweil mit try catch gemacht :)

Java:
String[] sa = new String[] { "1", "2" };
Object o = sa;
if (o instanceof Object[])
{
      System.out.println("es ist ein array!");
}
 
B

Beni

Gast
so also für die equals methode brauch ich noch eine methode die abfragt ob Object o ein Array ist, wie mache ich das? Ich habs derweil mit try catch gemacht :)

Man sollte noch bemerken, dass dieses Verhalten nicht dem offiziell geforderten Verhalten von "equals" entspricht. Da gilt nämlich:
It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
... und "Object[].equals( ArrayFun )" liefert garantiert immer false zurück. Einige Methoden der Standard-lib könnten mit so einem "equals" Probleme bekommen, bzw. sich nicht so verhalten wie du das erwartest.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Generics und Arrays Java Basics - Anfänger-Themen 17
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 Array Generics Java Basics - Anfänger-Themen 3
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
C Generics Array Java Basics - Anfänger-Themen 43
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


Oben