@SuppressWarnings("unchecked") private <T extends BaseAddress> T buildAddress() { switch (addressType) { case Group: GroupAddress groupAddr = new GroupAddress(); groupAddr.setAddressId(addressId); groupAddr.setName(name); return (T) groupAddr; case Party: PartyAddress partyAddr = new PartyAddress(); partyAddr.setAddressId(addressId); partyAddr.setName(name); return (T) partyAddr; case Physical: PhysicalAddress physicalAddr = new PhysicalAddress(); physicalAddr.setAddressId(addressId); physicalAddr.setAddress(address); physicalAddr.setServiceId(serviceId); return (T) physicalAddr; default: return null; } }