Generic Methoden die sich aufrufen wollen nicht immer

Status
Nicht offen für weitere Antworten.

thE_29

Top Contributor
Ahoi!
Warum geht das hier nicht:
Java:
  private <T extends String> void testGeneric(Vector<T> data, Class<T> clazz)
  {
    
  }
  
  private <T extends String> void callGeneric(Vector<T> data)
  {
    testGeneric(data, String.class);
  }

Aber wenn ich bei testGeneric das hintere <T> bei Class weglasse, geht es problemlos!
Java:
  private <T extends String> void testGeneric(Vector<T> data, Class clazz)
  {
    
  }
  
  private <T extends String> void callGeneric(Vector<T> data)
  {
    testGeneric(data, String.class);
  }

Es geht darum, dass ich bei der testGeneric gerne ein clazz.newInstance machen will ohne es auf T zu casten (jaja ist ja nicht so schwer, aber mir gehts ums Prinzip).

mfg

PS.: Editiert mal einer was mit Java Tags, da ist nachher alles kaputt :(
 
Zuletzt bearbeitet:

thE_29

Top Contributor
Lustig ist ja, diese 2 Dinge funktionieren!

Java:
  private <T extends String> void callGeneric(Vector<T> data)
  {
    testGeneric(null, String.class);
    testGeneric(data, (Class<T>)String.class);
  }
 

0x7F800000

Top Contributor
Warum geht das hier nicht:
Java:
  private <T extends String> void testGeneric(Vector<T> data, Class<T> clazz)
  {
    //"T extends String" ist irgendwie sinnfrei, weil string final class ist o_O??
  }
  
  private <T extends String> void callGeneric(Vector<T> data)
  {
    testGeneric(data, String.class);
    //trotzdem, mal angenommen du hast SubString extends String abgeleitet,
    //dann wäre callGeneric(new Vector<SubString>()) möglich
    //dann wäre data vom typ Vector<SubString>
    //dann würde das T bei testGeneric für SubString stehen
    //dann wäre String.class falsch, weil String.class vom Typ Class<String> ist
    //obwohl Class<SubString> erwartet wird, weil ja T=SubString sein soll... 
  }
PS.: Editiert mal einer was mit Java Tags, da ist nachher alles kaputt :(
wer ist hier mod? ???:L
 

0x7F800000

Top Contributor
Lustig ist ja, diese 2 Dinge funktionieren!

Java:
  private <T extends String> void callGeneric(Vector<T> data)
  {
    testGeneric(null, String.class); //hier kann es nicht zu widersprüchen kommen, weil das T aus dem zweiten argument bestimmt wird
    testGeneric(data, (Class<T>)String.class);//da hätte ich eigentlich "unchecked" warnung erwartet o_O?
  }
12
 
S

SlaterB

Gast
Java:
    private <T extends String>void testGeneric(Vector<? super T> data, Class<T> clazz)
    {

    }

    private void callGeneric(Vector<? super String> data)
    {
        testGeneric(data, String.class);
    }
edit: aber hilft vielleicht nicht viel, die genaue Bedeutung von super vergesse ich oft ;)
 

Ebenius

Top Contributor
Ahoi!
Warum geht das hier nicht:
Java:
  private <T extends String> void testGeneric(Vector<T> data, Class<T> clazz)
  {
    
  }
  
  private <T extends String> void callGeneric(Vector<T> data)
  {
    testGeneric(data, String.class);
  }
Sehen wir mal davon ab, dass String final ist... Der Typ T muss natürlich als Parameter des Vector-Arguments und des Class-Arguments der gleiche sein. In Deinem Aufruf in Zeile 8 ist der Vector parametrisiert mit irgendwas das von String erbt, das Class-Argument ist aber genau vom Typ String. Wenn ich das Beispiel mal umbastele (auf eine Klasse die nicht final ist), dann machst Du in etwa das gleiche wie:
Java:
<T extends Number> void foo(List<T> list, Class<T> clazz) { }

void bar() {
  foo(new ArrayList<Integer>(), Number.class);
  foo(new ArrayList<Double>(), Number.class);
  foo(new ArrayList<Float>(), Number.class);
  foo(new ArrayList<Long>(), Number.class);
}
Alle Aufrufe von foo() aus bar() sind falsch, weil T sowohl genau Number als auch genau Integer (Double, Float, Long) sein will. Verstanden?

Ebenius
 

thE_29

Top Contributor
String war ja nur als Bsp Klasse genommen ;)

Und ihr könnt ja sicher eure eigenen Beiträge editieren oder?


Achso mit dem super könnte man das machen. Naja, es geht halt mit beiden. Ich belasse es bei meinem cast ;)
 

thE_29

Top Contributor
So, ich hänge das gleich hier rein!

Wieso geht das hier:
Java:
    Map<String, Hashtable<Integer, String>> testGen = new Hashtable<String, Hashtable<Integer, String>>();
Aber wenn ich das Stirng, Hashtable in String, Map ändere geht es nicht mehr?
Java:
    Map<String, Map<Integer, String>> testGen = new Hashtable<String, Hashtable<Integer, String>>();

Hashtable ist ja Interface und beim ersten geht es ja auch!
 

thE_29

Top Contributor
Verstehe ich trotzdem nicht ganz (stehe auf dem Schlauch).

Ich gebe an das ich ein Interface MAP dort habe. Und die Klasse implementiert es ja auch, also warum geht das jetzt nicht (da mich dein List Bsp nur noch mehr verwirrt).

In deinem Bsp führt das ja zu einer ClassCastException weil du es zu einer ArrayList zurückcastest!
Ich will es ja wieder als MAP zurückhaben und nicht als Hashtable.
 
S

SlaterB

Gast
in eine Map<String, Map<Integer, String>>-map kann auch eine TreeMap einfügen,

falls das konkret dort hineingelegte Map-Objekt vom Typ Hashtable<String, Hashtable<Integer, String>>
auch noch irgendwo anders unter seinem richtigen Typ Hashtable<String, Hashtable<Integer, String>>
bekannt ist, dann kann man auf das Map-Objekt get() oder ähnlich aufrufen und eine Hashtable erwarten,

es kommt aber die einfügte TreeMap -> ClassCastException

lass das Beispiel aus dem anderen Thema ablaufen, ob List oder Map ist doch egal

> Ich will es ja wieder als MAP zurückhaben und nicht als Hashtable.

dann erzeuge doch nicht ein Objekt mit Hashtable, sondern mit Map,
z.B.
new Hashtable<String, Map<Integer, String>>();
 
Zuletzt bearbeitet von einem Moderator:

thE_29

Top Contributor
So, bin nur noch verwirrt ;)
Kannste da mal ein Bsp angeben mit meiner Angabe?

Wenigstens geht ja das hier:
Java:
  private Map<String, Map<Integer, List<Long>>> tempLists1 = new Hashtable<String, Map<Integer, List<Long>>>();

Edit: Jo, auf das bin ich auch schon draufgekommen! Wußte nicht, dass man dort hinten auch ein Interface angeben kann :)
 
S

SlaterB

Gast
so ist es auch korrekt

-----

Java:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        Map<String, Map<Integer, List<Long>>> map;

        Map<String, Map<Integer, List<Long>>> map1 = new Hashtable<String, Map<Integer, List<Long>>>();
        map = map1;
        map.put("", new TreeMap<Integer, List<Long>>());

        Map<Integer, List<Long>> valueMap1 = map1.values().iterator().next(); 
        // man kann gar nicht Hashtable auslesen, alles supi

        // ----------

        Map<String, Hashtable<Integer, List<Long>>> map2 = new Hashtable<String, Hashtable<Integer, List<Long>>>();
        map = (Map)map2; // Check ausschalten
        map.put("", new TreeMap<Integer, List<Long>>());

        Hashtable<Integer, List<Long>> valueMap2 = map2.values().iterator().next(); // ClassCastException

    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
Rakshan Generic reading of XML document from the root tag into an Collection Allgemeine Java-Themen 0
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
Neumi5694 Methoden Generic: Rückgabetyp als Class-Parameter übergeben Allgemeine Java-Themen 3
Neumi5694 Datentypen Generic mit parameterlosem Konstructor Allgemeine Java-Themen 4
C Generic collections und static typing Allgemeine Java-Themen 4
K Generic class und Reflection Allgemeine Java-Themen 2
K Saubere Verwendung von Generic Types Allgemeine Java-Themen 7
T Generic Allgemeine Java-Themen 1
C Generic-Funktion nur bei bestimmten Typen erlauben Allgemeine Java-Themen 6
M Cannot create a generic array of T Allgemeine Java-Themen 5
N Generic extends Generic Allgemeine Java-Themen 5
TheWhiteShadow Generic Bug? Allgemeine Java-Themen 19
P Generic zur Laufzeit Allgemeine Java-Themen 4
X Generic muss zwei Klassen/Interfaces erfüllen Allgemeine Java-Themen 5
S Reflection und Generic Allgemeine Java-Themen 9
G Klasse eines Generic Allgemeine Java-Themen 6
J Generic von einer ArrayList/HashMap bekommen Allgemeine Java-Themen 7
G Generic merhfach Angabe Allgemeine Java-Themen 8
Dragonfire Generic Typ zur Laufzeit Allgemeine Java-Themen 9
N Casten durch generic vermeiden ?? Allgemeine Java-Themen 10
N generic reflection Allgemeine Java-Themen 5
A Generic-Problem. was meint ihr dazu? Allgemeine Java-Themen 4
G unbekanntes Generic Allgemeine Java-Themen 12
K Bound mismatch: The generic method sort(List<T>) of ty Allgemeine Java-Themen 4
V ArrayList ist nicht generic!?? Oder bin ich blöd? Allgemeine Java-Themen 2
G [quote]the type HashMap is not generic; it cannot be paramet Allgemeine Java-Themen 4
C Generic Type ermitteln Allgemeine Java-Themen 3
H References to generic type Test.A<typ> should be param Allgemeine Java-Themen 5
byte Generic Type einer List zur Laufzeit rausfinden? Allgemeine Java-Themen 4
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
B Arrays von Methoden möglich? Allgemeine Java-Themen 44
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
N abstracte klassen methoden Allgemeine Java-Themen 32
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
B Methoden Java Getter und Setter Methoden Allgemeine Java-Themen 9
Y Java Methoden unterschiedliche Zahlenreihen Allgemeine Java-Themen 2
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
D Methoden Methoden anpassen und fehlende Funktionen hinzufügen Allgemeine Java-Themen 475
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
R Statistische Methoden (Mathematik) Aufgabe Allgemeine Java-Themen 9
X Brüche kürzen mittels Methoden und ggT Allgemeine Java-Themen 15
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
L mehrere Methoden Allgemeine Java-Themen 19
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
A Automatisches Methoden Laufzeiten logging? Allgemeine Java-Themen 7
M Quellcode von Java-Methoden Allgemeine Java-Themen 9
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
Q-bert Methoden Methoden in Java Allgemeine Java-Themen 13
D Methoden Java-Aufgabe Allgemeine Java-Themen 2
M Compiler-Fehler Methoden-Referenz Allgemeine Java-Themen 5
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
F Enum-werte als Methoden-Parameter übergeben Allgemeine Java-Themen 6
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
E OOP Objekte und Methoden Allgemeine Java-Themen 1
K Java ruft Methoden nicht der Reihe nach auf Allgemeine Java-Themen 14
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
T Java Array in Methoden Allgemeine Java-Themen 1
D Code für bereitgestellte Methoden Allgemeine Java-Themen 1
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
A Methoden verändern Allgemeine Java-Themen 12
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
J Best Practice Testen von protected Methoden Allgemeine Java-Themen 7
L Methoden "Schiffe versenken" Quellcode in Methoden umwandeln Allgemeine Java-Themen 6
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
Sogomn Best Practice "Doppelte" Methoden Allgemeine Java-Themen 3
Paul15 String Methoden Allgemeine Java-Themen 7
G Methoden BMI -Wert Aufgabe(Methoden) Allgemeine Java-Themen 4
F Testen von Methoden Allgemeine Java-Themen 3
S "Vererben" statischer Felder/Methoden Allgemeine Java-Themen 4
F Methoden in der Enumeration Klasse Allgemeine Java-Themen 1
S Methoden ohne Methodenkopf ?! Allgemeine Java-Themen 5
T Überschreiben von Methoden Allgemeine Java-Themen 6
M Methoden werden in falscher Reihenfolge bearbeitet Allgemeine Java-Themen 10
S Methoden Methoden überschreiben Allgemeine Java-Themen 3
N Threads statische Methoden in Threads Allgemeine Java-Themen 5
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
S Methoden Frage Allgemeine Java-Themen 2
R Wie kann man diese Methoden in arrays etablieren? Allgemeine Java-Themen 8
M Methoden in Rescources speichern Allgemeine Java-Themen 4
G Synchronisation nicht statischer Methoden Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben