class ApplicationRoleObject {

  /**
   * Main entry point.
   *
   * @param args program arguments
   */
  public static void main(String[] args) {<FILL_FUNCTION_BODY>}
}

    var customer = Customer.newCustomer(Borrower, Investor);

    LOGGER.info(" the new customer created : {}", customer);

    var hasBorrowerRole = customer.hasRole(Borrower);
    LOGGER.info(" customer has a borrowed role - {}", hasBorrowerRole);
    var hasInvestorRole = customer.hasRole(Investor);
    LOGGER.info(" customer has an investor role - {}", hasInvestorRole);

    customer.getRole(Investor, InvestorRole.class)
        .ifPresent(inv -> {
          inv.setAmountToInvest(1000);
          inv.setName("Billy");
        });
    customer.getRole(Borrower, BorrowerRole.class)
        .ifPresent(inv -> inv.setName("Johny"));

    customer.getRole(Investor, InvestorRole.class)
        .map(InvestorRole::invest)
        .ifPresent(LOGGER::info);

    customer.getRole(Borrower, BorrowerRole.class)
        .map(BorrowerRole::borrow)
        .ifPresent(LOGGER::info);
  
<no_super_class>