Sprache

Collections.CheckedCollection(ICollection, Class) Methode

Definition

Gibt eine dynamisch typsichere Ansicht der angegebenen Auflistung zurück.

[Android.Runtime.Register("checkedCollection", "(Ljava/util/Collection;Ljava/lang/Class;)Ljava/util/Collection;", "")]
[Java.Interop.JavaTypeParameters(new System.String[] { "E" })]
public static System.Collections.ICollection CheckedCollection(System.Collections.ICollection c, Java.Lang.Class type);
[<Android.Runtime.Register("checkedCollection", "(Ljava/util/Collection;Ljava/lang/Class;)Ljava/util/Collection;", "")>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "E" })>]
static member CheckedCollection : System.Collections.ICollection * Java.Lang.Class -> System.Collections.ICollection

Parameter

c
ICollection

die Auflistung, für die eine dynamisch typsichere Ansicht zurückgegeben werden soll

type
Class

der Typ des Elements, das c gehalten werden darf

Gibt zurück

eine dynamisch typsichere Ansicht der angegebenen Auflistung

Attribute

Hinweise

Gibt eine dynamisch typsichere Ansicht der angegebenen Auflistung zurück. Jeder Versuch, ein Element des falschen Typs einzufügen, führt zu einem sofortigen ClassCastExceptionErgebnis. Wenn eine Auflistung keine falsch eingegebenen Elemente enthält, bevor eine dynamisch typsichere Ansicht generiert wird und dass der gesamte nachfolgende Zugriff auf die Auflistung über die Ansicht erfolgt, wird sichergestellt , dass die Auflistung kein falsch typiertes Element enthalten kann.

Der Generikamechanismus in der Sprache stellt die Überprüfung der Kompilierungszeit (statischer) Typen bereit, aber es ist möglich, diesen Mechanismus mit deaktivierten Umwandlungen zu besiegen. In der Regel ist dies kein Problem, da der Compiler Warnungen bei allen solchen deaktivierten Vorgängen ausgibt. Es gibt jedoch Zeiten, in denen die Überprüfung statischer Typen allein nicht ausreicht. Angenommen, eine Auflistung wird an eine Drittanbieterbibliothek übergeben, und es ist zwingend erforderlich, dass der Bibliothekscode die Auflistung nicht beschädigt, indem ein Element des falschen Typs eingefügt wird.

Eine weitere Verwendung dynamisch typsicherer Ansichten ist das Debuggen. Angenommen, ein Programm schlägt mit einem ClassCastExceptionFehler fehl, der angibt, dass ein falsch typisiertes Element in eine parametrisierte Auflistung eingefügt wurde. Leider kann die Ausnahme jederzeit auftreten, nachdem das fehlerhafte Element eingefügt wurde, sodass es in der Regel wenig oder keine Informationen zur tatsächlichen Quelle des Problems bereitstellt. Wenn das Problem reproduzierbar ist, kann man seine Quelle schnell ermitteln, indem das Programm vorübergehend geändert wird, um die Sammlung mit einer dynamisch typsicheren Ansicht umzuschließen. Beispielsweise diese Deklaration:

{@code
                Collection<String> c = new HashSet<>();
            }

kann vorübergehend durch diesen ersetzt werden:

{@code
                Collection<String> c = Collections.checkedCollection(
                    new HashSet<>(), String.class);
            }

Wenn das Programm erneut ausgeführt wird, tritt es an dem Punkt fehl, an dem ein falsch typiertes Element in die Auflistung eingefügt wird und die Quelle des Problems eindeutig identifiziert. Nachdem das Problem behoben wurde, kann die geänderte Deklaration wieder auf das Original zurückgesetzt werden.

Die zurückgegebene Auflistung übergibt den HashCode nicht und entspricht Vorgängen an die Sicherungssammlung, basiert jedoch auf Object's equals und hashCode Methoden. Dies ist erforderlich, um die Verträge dieser Vorgänge beizubehalten, wenn die Sicherungsauflistung ein Satz oder eine Liste ist.

Die zurückgegebene Auflistung kann serialisiert werden, wenn die angegebene Auflistung serialisierbar ist.

Da null er als Wert eines beliebigen Bezugstyps betrachtet wird, ermöglicht die zurückgegebene Auflistung das Einfügen von NULL-Elementen, wenn die zugrunde stehenden Auflistung erfolgt.

Hinzugefügt in 1.5.

Java Dokumentation für java.util.Collections.checkedCollection(java.util.Collection<E>, java.lang.Class<E>).

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Gilt für: