//: generics/FactoryConstraint.java // ©2015 MindView LLC: see Copyright.txt interface FactoryI { T create(); } class Foo2 { private T x; public > Foo2(F factory) { x = factory.create(); } // ... } class IntegerFactory implements FactoryI { @Override public Integer create() { return 0; } } class Widget { public static class Factory implements FactoryI { @Override public Widget create() { return new Widget(); } } } public class FactoryConstraint { public static void main(String[] args) { new Foo2<>(new IntegerFactory()); new Foo2<>(new Widget.Factory()); } } ///:~