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, Booleanetc sind Wrapper - Klassen von Java , der Hilfe bei den Typen während der Kompilierung zu überprüfen. Der obige Code objist beispielsweise vom Typ String, sodass Sie keinen anderen Typ hinzufügen können (versuchen Sie obj.add(1), es wird ein Fehler ausgegeben). Ebenso obj1ist vom IntegerTyp, Sie können keinen anderen Typ hinzufügen (versuchen Sie obj1.add("hello"), Fehler wird da sein).
T createObjectsich 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.