Ich war verwirrt über die Verwendung von Generika (generischer Typ) und schrieb ein Beispiel, das ich häufig verwende.
public class Foo<T> {
T t;
public T get() {
return t;
}
public void set(T t) {
this.t = t;
}
}
Wenn Sie mehrere Parameter verwenden, trennen Sie diese mit `Foo <T, U>`
und einem Komma.
public class Foo<T extends Parent> {
T t;
public T get() {
return t;
}
public void set(T t) {
this.t = t;
}
}
Es ist unpraktisch, wenn Sie eine vorübergehende Entscheidung treffen möchten, wenn Sie sie für die gesamte Klasse angeben. Zum Beispiel, wenn Sie eine Liste in ein Array konvertieren möchten
List list = new ArrayList<String>();
list.add("foo1");
list.add("foo2");
list.add("foo3");
String[] strList = list.toArray(new String[list.size()]);
Ich denke, Sie können die toArray-Methode wie diese verwenden. Die Implementierung zu diesem Zeitpunkt
public class Foo {
public <T> T get(T t) {
return t;
}
}
Zu diesem Zeitpunkt wird T durch Betrachten des Argumenttyps bestimmt.
Es überrascht nicht, dass es kein neues T () sein kann. Der Grund ist, dass es keine Garantie gibt, dass eine Instanz erstellt werden kann, es sei denn, Sie wissen, wer T ist.
public class Foo<T extends Parent> {
public T get() {
return new T(); //Kann nicht!!
}
}
Es scheint, dass Sie Java Refactoring verwenden können, um eine Instanz aus der Class-Klasse zu erstellen, um eine Codierung wie "new T ()" zu erreichen, aber die Leistung scheint erheblich zu sinken.
Recommended Posts