Das liegt daran, dass die class-cast-Ausnahme nur ausgelöst wird, wenn Sie etwas mit dem Wert tun, rufen Sie nach dem Cast eine Methode auf. In der REPL zum Beispiel hätten Sie im zweiten Fall einen toString
-Aufruf. Hinweis:
Der Grund dafür ist, dass Inst[T]
generisch ist mit type Parameter T
, das zur Laufzeit gelöscht wird; Nur wenn die Aufruf-Site (die eine statische Kenntnis des Typs T
hat) versucht, eine Methode für das Ergebnis aufzurufen, findet die tatsächliche Typprüfung statt.
Für Ihre Folgefrage ist toString
für jedes Objekt definiert, und da T
generisch ist, haben Sie eine eingerahmte Ganzzahl ( <: AnyRef
) und toString
und println
erfolgreich innerhalb der Methode is
. Ein weiteres Beispiel, bei dem Try
fehlschlagen würde, ist dies:
Während @ 0 __s Antwort erklärt, warum es nicht funktioniert, hier ist, wie es funktioniert:
%Vor%Tags und Links scala