as<T extends JObject?> method
Casts this object to another type
.
If releaseOriginal
is true
, the casted object will be released.
Implementation
T as<T extends JObject?>(
JObjType<T> type, {
bool releaseOriginal = false,
}) {
assert(
() {
final jClass = type.jClass.reference.toPointer();
final canBeCasted = Jni.env.IsInstanceOf(reference.pointer, jClass);
Jni.env.DeleteGlobalRef(jClass);
return canBeCasted;
}(),
'The object must be of type "${type.signature}".',
);
if (releaseOriginal) {
final ret = type.fromReference(JGlobalReference(reference.pointer));
reference.setAsReleased();
return ret;
}
final newRef = JGlobalReference(Jni.env.NewGlobalRef(reference.pointer));
return type.fromReference(newRef);
}