ApexFactory { @Updater @Builder <S extends String> Apex<S> apex(S appendix) { return new Apex(string, appendix); } ApexFactory(T string);   }
@Test public void apex() throws IOException, SQLException { ApexFactory<String> factory = new ApexFactory("a"); ApexFactory.Apex<String> apex = factory.apex("b"); ApexFactory.Apex<String> updatedApex = apexUpdaterFactory(factory) .updater(apex) .appendix("c") .done(); assertThat(apex.concat(), is("ab")); assertThat(updatedApex.concat(), is("ac")); }