Das Orakel doc sagt Generics sind in Java mit einer Technik Call-Typ Löschung implementiert und so funktioniert es.Java-Typ löschen und Arrays
- Ersetzen Sie alle Typparameter in generischen Typen durch ihre Grenzen oder Object, wenn die Typparameter unbegrenzt sind. Der erzeugte Bytecode enthält daher nur gewöhnliche Klassen, Schnittstellen und Methoden.
- Falls erforderlich, Typumformungen einfügen, um die Typensicherheit zu gewährleisten.
- Generieren Sie Bridge-Methoden, um Polymorphie in erweiterten generischen Typen zu erhalten.
Also, wenn ich eine generische Klasse Container sagen, wie unten:
class Container<T>{
T initialValue;
List<T> valueList=new ArrayList<T>();
public List<T> getValueList(){
return valueList;
}
}
es gleichwertige Klasse ist wie nach Typ Löschung nach der Verarbeitung aussehen:
class Container{
Object initialValue;
List valueList=new ArrayList();
public List getValueList(){
return valueList;
}
}
mich korrigieren, wenn eine falsche hier
In ähnlicher Weise, wenn eine der oben genannten Klasse wie folgt ändern
class Container<T>{
T initialValue;
List<T> valueList=new ArrayList<T>();
T[] arrayValue;
public Container(T[] array){
arrayValue=array;
}
public List<T> getValueList(){
return valueList;
}
}
wird nicht das sein ???
class Container{
Object initialValue;
List valueList=new ArrayList();
Object[] arrayValue;
public Container(Object[] array){
arrayValue=array;
}
public List getValueList(){
return valueList;
}
}
wenn dies wahr ist, dann sollte ich auch wie dieses: T[] arrayValue=new T[10];
// Zeitfehler Kompilieren; wie die obige Aussage würde in
Object[] arrayValue=new Object[10];
Klarheit Löschung, wie Art arbeitet für Arrays in Java Brauchen Sie konvertiert ??
Was ist der Fehler Sie sehen, mit Welcher Code speziell? Es ist nicht wirklich klar, was du fragst. – pvg
warum T [] arrayValue = new T [10]; ist nicht erlaubt. Warum können wir kein Array Objekt des parametrisierten Typs erstellen? –