Es ist wirklich einfach. Es ist eine neue Funktion, die in J2SE 5 eingeführt wurde . Wenn Sie nach dem Klassennamen eckige Klammern angeben, erstellen Sie einen temporären Datentyp, der jeden Datentyp enthalten kann.
Beispiel:
class A<T>{
T obj;
void add(T obj){
this.obj=obj;
}
T get(){
return obj;
}
}
public class generics {
static<E> void print(E[] elements){
for(E element:elements){
System.out.println(element);
}
}
public static void main(String[] args) {
A<String> obj=new A<String>();
A<Integer> obj1=new A<Integer>();
obj.add("hello");
obj1.add(6);
System.out.println(obj.get());
System.out.println(obj1.get());
Integer[] arr={1,3,5,7};
print(arr);
}
}
Stattdessen <T>
können Sie tatsächlich alles schreiben und es funktioniert genauso. Versuchen Sie, <ABC>
anstelle von zu schreiben <T>
.
Dies dient nur der Bequemlichkeit:
<T>
wird als beliebiger Typ bezeichnet
<E>
als Elementtyp
<N>
als Nummerntyp
<V>
als Wert
<K>
als Schlüssel
Aber Sie können es so nennen, wie Sie wollen, es spielt keine Rolle.
Darüber hinaus Integer
, String
, Boolean
etc sind Wrapper - Klassen von Java , der Hilfe bei den Typen während der Kompilierung zu überprüfen. Der obige Code obj
ist beispielsweise vom Typ String
, sodass Sie keinen anderen Typ hinzufügen können (versuchen Sie obj.add(1)
, es wird ein Fehler ausgegeben). Ebenso obj1
ist vom Integer
Typ, Sie können keinen anderen Typ hinzufügen (versuchen Sie obj1.add("hello")
, Fehler wird da sein).
T createObject
sich in Pool oder PoolFactory befinden? Wothis.freeObjects = ...
soll sein? Ist das ein separates Beispiel? Es ist illegal, es dort zu haben; es muss innerhalb einer Methode sein.