J'étais confus quant à l'utilisation des génériques (type générique), j'ai donc écrit un exemple que j'utilise souvent.
public class Foo<T> {
T t;
public T get() {
return t;
}
public void set(T t) {
this.t = t;
}
}
Lorsque vous utilisez plusieurs paramètres, séparez-les par `` Foo <T, U> '' et une virgule.
public class Foo<T extends Parent> {
T t;
public T get() {
return t;
}
public void set(T t) {
this.t = t;
}
}
Ce n'est pas pratique lorsque vous souhaitez prendre une décision temporaire si vous la spécifiez pour toute la classe. Par exemple, lorsque vous souhaitez convertir une liste en tableau
List list = new ArrayList<String>();
list.add("foo1");
list.add("foo2");
list.add("foo3");
String[] strList = list.toArray(new String[list.size()]);
Je pense que vous pouvez utiliser la méthode toArray comme celle-ci. La mise en œuvre à ce moment
public class Foo {
public <T> T get(T t) {
return t;
}
}
À ce stade, T est déterminé en examinant le type d'argument.
Sans surprise, il ne peut pas s'agir de `` nouveau T () ''. La raison est qu'il n'y a aucune garantie qu'une instance puisse être créée à moins que vous ne sachiez qui est T.
public class Foo<T extends Parent> {
public T get() {
return new T(); //Ne peux pas!!
}
}
Il semble que vous puissiez utiliser le refactoring java pour créer une instance à partir de la classe Class pour réaliser un codage comme new T ()
, mais les performances semblent chuter considérablement.
Recommended Posts