To naprawdę proste. Jest to nowa funkcja wprowadzona w J2SE 5. Określenie nawiasów klamrowych po nazwie klasy oznacza, że tworzysz tymczasowy typ danych, który może pomieścić dowolny typ danych.
Przykład:
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);
}
}
Zamiast <T>
, rzeczywiście można napisać coś i będzie działać w ten sam sposób. Spróbuj wpisać <ABC>
zamiast <T>
.
To jest po prostu dla wygody:
<T>
jest określany jako wszelkiego rodzaju
<E>
jako element typu
<N>
jako typ numeru
<V>
jako wartość
<K>
jako klucz
Ale możesz nazwać to, co chcesz, to naprawdę nie ma znaczenia.
Ponadto, Integer
, String
, Boolean
itd. To klasy języka Java, które pomagają w sprawdzaniu typów podczas kompilacji. Na przykład w powyższym kodzie obj
jest typu String
, więc nie można dodać do niego żadnego innego typu (spróbuj obj.add(1)
, zostanie zgłoszony błąd). Podobnie, obj1
jest typu Integer
, nie można dodać do niego żadnego innego typu (spróbuj obj1.add("hello")
, wystąpi błąd).
google java generics –
Ciężko jest sparsować twój kod. Nie ma wcięć na początek, a są dwa otwarte klamry i tylko jeden blisko. Czy 'T createObject' powinien znajdować się wewnątrz Pool lub PoolFactory? Gdzie jest "this.freeObjects = ..."?Czy to jest osobny przykład? Jest tam nielegalne; musi być wewnątrz metody. – mgiuca
Jeśli ktoś szuka informacji o '<>' (operator diamentu), który mógłby być użyty jak 'Lista list = new ArrayList <>();' odwiedź https://docs.oracle.com/javase/7/docs /technotes/guides/language/type-inference-generic-instance-creation.html. –
Pshemo