@Override public T cast(Pointer peer) { if (BridJ.isCastingNativeObjectReturnTypeInCurrentThread()) { peer = peer.withReleaser(newCPPReleaser(type)); } T instance = super.cast(peer); Object[] templateParameters = getTemplateParameters(type); setTemplateParameters(instance, (Class) typeClass, templateParameters); return instance; }