generate constructor