Generische Typen instanzieren

Status
Nicht offen für weitere Antworten.

Biesterfeld

Aktives Mitglied
Hi Leute,

hab ein doofes Problem. Gegeben sei folgender Beispielcode:

Code:
import java.util.ArrayList;
import java.util.List;

public class GenericsTest <T extends A>{
   
   private final List<T> list;
   
   public GenericsTest() {
      this.list = new ArrayList<T>();
      T toAdd = null;
      // toAdd = new T( 0 );
      // toAdd = T.getInstance( 0 );
      // toAdd = T.class.newInstance();
      this.list.add( toAdd );
   }
}

und

Code:
public class A {

   private final int x;
   
   public A( int x ) {
      this.x = x;
   }
   
   public static A getInstance( int x ) {
      return new A( x );
   }
}

public class B extends A {
   
   public B( int x ) {
      super( x );
   }

   public static A getInstance( int x ) {
      return new B( x );
   }
}

Soweit. Die auskommentierten Fehler im Konstruktor der Klasse GenericsTest sind augenscheinlich, veranschaulichen aber mein Problem. Ich würde gerne eine Instanz von einem Datentyp erzeugen, den ich zur Kompilierzeit gar nicht kenne. Ich würde gerne auf statische Eigenschaften von T zugreifen, was auch nicht geht.

Lässt sich sowas in Java gar nicht realisieren oder gibt es ein Muster, welches ein solches Problem löst?

Vielen Dank schonmal und viele Grüße
Biesterfeld
 

*Hendrik

Bekanntes Mitglied
Kannst Du das Objekt nicht im Konstruktor übergeben?

Code:
import java.util.ArrayList; 
import java.util.List; 

public class GenericsTest <T extends A>{ 
    
   private final List<T> list; 
   private T toAdd;
    
   public GenericsTest(T toAdd) { 
      this.list = new ArrayList<T>(); 
      this.toAdd = toAdd;
      this.list.add( toAdd ); 
   } 
}
 

Biesterfeld

Aktives Mitglied
Hi,

Kannst Du das Objekt nicht im Konstruktor übergeben?
Kann ich nicht. Es geht konkret um einen Datei-Parser, der mir Abschnitte einer Text-Datei als Objekte zusammenbaut und in die Liste schiebt. Obwohl diese Abschnitte immer einem festgelegtem Format entsprechen, kann man sie je nach Datei noch weiter untergliedern. Daher verschiedene Klassen mit denen der Parser generisch zurechtkommen sollte.

Grüße
Biesterfeld
 

Biesterfeld

Aktives Mitglied
Der Rückgabetyp einer Factory-Methode ist immer ein übergeordneter Datentyp. Das wollte ich gerne Vermeiden und eben daher mit Generics arbeiten. Wie es sich dreht und wendet ... ich habe zunehmend das Gefühl, das sich das was ich gerne hätte mit Generics nicht realisieren lässt. Nämlich dass das Objekt, dass von einem generischen Datentyp abhängt mir auch Objekte von genau dem Typ erzeugt.

Dennoch vielen Dank
Biesterfeld
 
S

SlaterB

Gast
wie willst du denn diese Liste anlegen?

wenn du irgendwo
GenericsTest<X> = new GenericsTest<X>();
hast, dann könntest du doch auch
GenericsTest<X> = new GenericsTest<X>(new X());
schreiben?
 

Biesterfeld

Aktives Mitglied
GenericsTest<X> = new GenericsTest<X>(new X());

Das bringt mir nur nichts, weil ich wie ich ja schon schrieb, einen FileParser habe, der nach und nach Objekte von X erzeugt. Was bringt es mir dann, genau ein Objekt X an den Parser zu übergeben?
 
S

SlaterB

Gast
dann könntest du noch beschreiben, wie die Situation wirklich ist,
und es findet sich doch eine Lösung,
dein obiger Code scheint nun wirklich nur ein Beispiel zu sein


von dem einem Objekt könntest du dir übrigens die Klasse holen und dann newInstance() aufrufen, um mehr Objekte zu erzeugen ;)

oder du erstellst in GenericsTest eine abstrakte Operation:

Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        GenericsTest<String> g = new GenericsTest<String>()
            {
                public String newT()
                {
                    return "Test";
                }
            };
    }
}


abstract class GenericsTest<T>
{

    private final List<T> list;

    public GenericsTest()
    {
        this.list = new ArrayList<T>();
        this.list.add(newT());
        System.out.println("list: " + list);
    }

    public abstract T newT();
}
 

Marco13

Top Contributor
Biesterfeld hat gesagt.:
Der Rückgabetyp einer Factory-Methode ist immer ein übergeordneter Datentyp.

In der Hoffnung, das jetzt richtig verstanden zu haben: Nein. Seit Java 1.5 kann man kovariante Rückgabetypen verwenden.

Code:
interface Factory { Superclass create(); }

class A extends Superclass {}
class B extends Superclass {}

class FactoryA implements Factory { A create() { return new A(); }
class FactoryB implements Factory { B create() { return new B(); }
 

*Hendrik

Bekanntes Mitglied
Im Sinne von SlaterB?

Code:
class GenericTest<T extends A> {

    private final List<T> list;
    private Class<T> tClass;
    private T toAdd;

    public GenericTest() {
        this.list = new ArrayList<T>();
        try {
            toAdd = tClass.newInstance();            
        } catch (InstantiationException ex) {

        } catch (IllegalAccessException ex) {

        }
        this.list.add(toAdd);
    }
    
}
 
S

SlaterB

Gast
was meinst du mit 'in meinem Sinne'?
die NullPointerException bei tClass.newInstance(); ist nicht in meinem Sinne, nein ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Interface mit generische Typen Allgemeine Java-Themen 5
M Interface Generische Klassen mit mehreren Typen überschreiben Allgemeine Java-Themen 0
S Generische Typen: Frage dazu Allgemeine Java-Themen 11
Zrebna Random Number - Generische Formel zwischen zwei INKLUSIVEN Werten Allgemeine Java-Themen 16
F Verständnisprobleme Aufgabenstellung Aktionsobjekte und generische Listen Allgemeine Java-Themen 1
J Generische Interface - Problem Allgemeine Java-Themen 3
J Generische Interfaces mehrfach einbinden Allgemeine Java-Themen 11
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3
H Interface Generische Schnittstelle (rekusiv) Allgemeine Java-Themen 2
C generische Authentifizierung Allgemeine Java-Themen 7
JCODA Generische Map Frage Allgemeine Java-Themen 10
H Generische Array Allgemeine Java-Themen 11
M Problem beim schreiben einer eigene generische Klasse Hashtable Allgemeine Java-Themen 11
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
M Problem beim schreiben einer eigene generische Klasse LinkedList Allgemeine Java-Themen 34
D generische Klasse für alle Maps (nicht Collections :-)) Allgemeine Java-Themen 11
D Methode für generische enummap/enum Allgemeine Java-Themen 10
B Generische Datentypen MergeSort Allgemeine Java-Themen 5
M Generische Klassen Allgemeine Java-Themen 3
M generische Listener Allgemeine Java-Themen 2
H generische Klasse Realtion Allgemeine Java-Themen 2
T Ideenfindung: Generische Transportklasse? Allgemeine Java-Themen 3
C Generische Methode (Schablone) Allgemeine Java-Themen 8
G generische Klasse als Parameter einer generischen Klasse Allgemeine Java-Themen 5
leifg Rechenoperationen auf generische Datentypen Allgemeine Java-Themen 10
R Generische Listener und Sender Allgemeine Java-Themen 12
M Generische Datentypen Allgemeine Java-Themen 14
S Generische Liste Allgemeine Java-Themen 30
F Viele generische Parameter sinnvoll? oder besser casten? Allgemeine Java-Themen 10
S Generische Methode Allgemeine Java-Themen 13
R Frage zu einfügen in generische lineare Liste Allgemeine Java-Themen 7
S Generische Methoden Allgemeine Java-Themen 7
D Statische, generische Methode will nicht. Allgemeine Java-Themen 2
T JavaPoet - (noch) nicht existente Typen Allgemeine Java-Themen 2
T Fremde Typen mockt man nicht? Allgemeine Java-Themen 3
M Generics / Typen Allgemeine Java-Themen 1
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
C Generic-Funktion nur bei bestimmten Typen erlauben Allgemeine Java-Themen 6
F Grundrechenarten mit eigenen Typen Allgemeine Java-Themen 9
N Vergleich von generischen Typen Allgemeine Java-Themen 2
S Überschriebene Methode eines generischen Typen aufrufen Allgemeine Java-Themen 4
K Arrays.asList und primitive Typen Allgemeine Java-Themen 2
H2SO3- problem mit objecten verschiener Typen (E, <E> und T) Allgemeine Java-Themen 2
B hashtable für unterschiedliche Typen - mit Generics Allgemeine Java-Themen 8
T DataFrame (Matrix mit mit verschiedenen Typen pro Spalte) Allgemeine Java-Themen 4
H2SO3- merken versch. Date Typen + erlaubte und unerlaubte kombinat Allgemeine Java-Themen 4
V Variable vom Typ String zum Typen "Message" konve Allgemeine Java-Themen 2
F Kann man keine Arrays von generischen Typen erstellen? Allgemeine Java-Themen 2
Q Typen von Generics & Casten Allgemeine Java-Themen 3
D Listen von Generischen Typen inkl. Vererbung Allgemeine Java-Themen 2
lumo Typen MSSQL + JAVA Allgemeine Java-Themen 4
M Beliebig viele Typen bei Generics Allgemeine Java-Themen 3
G Methoden auf Arrays aller primitiver Typen zusammenfassen? Allgemeine Java-Themen 8
C Dynamisch Objekte unterschiedlicher Typen erzeugen Allgemeine Java-Themen 6
S Variablennamen von primitiven Typen eines Konstruktors lesen Allgemeine Java-Themen 7
J parsen von verschiedenen dokument typen Allgemeine Java-Themen 3
S generics primitiver typen Allgemeine Java-Themen 5
D generischer Iterator mit verschiedenen Typen Allgemeine Java-Themen 3
BonoBoo Alternative zum endlosen Instanzieren Allgemeine Java-Themen 2
G Fehler beim instanzieren einer Generischen Klasse Allgemeine Java-Themen 5
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
R Interface instanzieren Allgemeine Java-Themen 8
C Alle Klassen eines Packages lesen und instanzieren? Allgemeine Java-Themen 9
C Innere Klassen zur Laufzeit Instanzieren Allgemeine Java-Themen 4
G Generics: Instanzieren einer Klasse in einer Methode. Allgemeine Java-Themen 2
R objektname aus string beim instanzieren Allgemeine Java-Themen 4
S Thread wird nach erneutem Instanzieren doppelt gestartet!? Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben