Eigentlich Sie können tun , was Sie wollen. Wenn Sie mehrere Schnittstellen oder eine Klasse plus Schnittstellen bereitstellen möchten, muss Ihr Platzhalter ungefähr so aussehen:
<T extends ClassA & InterfaceB>
Weitere Informationen finden Sie im Generika-Tutorial unter sun.com, insbesondere im Abschnitt Parameter für gebundene Typen, unten auf der Seite. Sie können tatsächlich mehr als eine Schnittstelle auflisten, wenn Sie dies wünschen, und zwar & InterfaceName
für jede, die Sie benötigen.
Dies kann beliebig kompliziert werden. Weitere Informationen finden Sie in der JavaDoc-Deklaration von Collections#max
(in zwei Zeilen eingeschlossen):
public static <T extends Object & Comparable<? super T>> T
max(Collection<? extends T> coll)
warum so kompliziert? Wie in den häufig gestellten Fragen zu Java Generics erwähnt: Um die Binärkompatibilität zu gewährleisten .
Es sieht so aus, als würde dies bei der Variablendeklaration nicht funktionieren, aber es funktioniert, wenn einer Klasse eine generische Grenze gesetzt wird. Um zu tun, was Sie wollen, müssen Sie möglicherweise durch ein paar Reifen springen. Aber du kannst es schaffen. Sie können so etwas tun, indem Sie Ihrer Klasse eine generische Grenze setzen und dann:
class classB { }
interface interfaceC { }
public class MyClass<T extends classB & interfaceC> {
Class<T> variable;
}
um variable
das zu bekommen hat die Einschränkung, die Sie wollen. Weitere Informationen und Beispiele finden Sie auf Seite 3 von Generics in Java 5.0 . Beachten Sie, dass in <T extends B & C>
der Klasse der Name an erster Stelle stehen muss und die Schnittstellen folgen. Und natürlich können Sie nur eine Klasse auflisten.