Generics Syntax

Lastlord

Mitglied
Hallo Leute,
weiß jemand, wie man die folgende Codezeile gültig machen kann?

Java:
Constructor<Hashtable<Integer, Integer>> constr = Hashtable.class.getConstructor();

Diese Möglichkeit funktioniert nicht:
Java:
Constructor<Hashtable<Integer, Integer>> constr = Hashtable<Integer, Integer>.class.getConstructor();

Falls jemand ne Idee hat, wärs schön, wenn er sie postet.

Vielen Dank

David

Ps: Tut mir Leid aber mir ist keine bessere Themenüberschrift eingefallen.
 
Java:
      try {
         Constructor constr = Hashtable.class.getConstructor(new Class[] { Integer.TYPE} );
         System.out.println("constr: " + constr );
      }
      catch( SecurityException e ) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      catch( NoSuchMethodException e ) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }

Oder
Java:
  Constructor constr = Hashtable.class.getConstructor(new Class[] { Integer.TYPE , Integer.TYPE } );

ansonsten.. kp^^, aber wofür brauchst du den das? ;/
 
Zuletzt bearbeitet:
Danke für deine Antwort.

Der ganzen Aufwand mach ich eingentlich nur um an ein Constructor <Hashtable<Integer, Integer>>-Objekt zu kommen. Außerdem will ich ja den Defaultkonstruktor der Klasse kriegen. Also kp was du mit
Java:
new Class[] { Integer.TYPE , Integer.TYPE }
bezweckst.
 
Den Defaultkonstruktor bekommste ja einfach..

Java:
      try {
         Constructor constr = Hashtable.class.getConstructor(new Class[] {} );
         System.out.println("constr: " + constr);
         // ist das selbe wie Constructor<Hashtable> constr = Hashtable.class.getConstructor();
      }
      catch( SecurityException e ) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      catch( NoSuchMethodException e ) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }

mit
Java:
new Class[] { Integer.TYPE , Integer.TYPE }

würdest du den Hashtable(int , int) - Konstruktor bekommen, wenn es ihn geben würde. Das sollte dir aber eigentlich die Execption gezeigt haben.

Java:
Constructor constr = Hashtable.class.getConstructor(new Class[] { Integer.TYPE , Float.TYPE} );

Wäre wieder möglich...und auch richtig.
 
Das was du willst, dass du ein Konstructor-Klasse zu einer generischen HashTable, welche gleich die entsprechenden Typen enthält. Funktioniert afaik nicht. Aber ich lass mich gerne eines besseren belehren.

Zur Not musst du eine raw (rohe) HashTable erstellen und diese zu einer generic casten. Da kommt dann eine Warnung, diese kann man aber unterdrücken (sollte man aber nur für diese Zeile machen).
 
Nachdem die generischen Typparameter der Hashtable zur Runtime nicht mehr bekannt sind, kann das so nicht funktionieren.

Was hast du denn davon, dass so zu machen? Ich meine, so wie es im Moment da steht, gibt es für mich noch nicht viel Sinn :)

Korrekt ist es so:
Java:
@SuppressWarnings("rawtypes")
Constructor<Hashtable> constr = Hashtable.class.getConstructor();
@SuppressWarnings("unchecked")
Hashtable<Integer, Integer> x = constr.newInstance();
 
Zurück