publicclassFoo{privatefinalintrequired1;privatefinalintrequired2;privatefinalintoptional1;privatefinalintoptional2;publicstaticclassBuilder{// required privatefinalintrequired1;privatefinalintrequired2;// optional privatefinalintoptional1;privatefinalintoptional2;publicBuilder(intrequired1,intrequired2){this.required1=required1;this.required2=required2;}publicBuilderrequired1(intval){required1=val;returnthis;}publicBuilderrequired2(intval){required2=val;returnthis;}publicBuilderoptional1(intval){optiona1=val;returnthis;}publicBuilderoptional2(intval){optiona2=val;returnthis;}publicFoobuild(){returnnewFoo(this);}}privateFoo(Builderbuilder){required1=builder.required1required2=builder.required2optional1=builder.optional1optional2=builder.optional2}}// usage example FoofooInstance=newFoo.Builder(10,10).optional1(100).optional2(200).build();// build should throw IllegalStateException if parameters violate rules // method that uses Builder // assume Builder is defined as: publicinterfaceBuilder<T>{publicTbuild();}TreenodeMethod(Builder<?extendsNode>nodeBuilder){//...}