- 工厂模式在泛型中创建实例
interface FactoryI<T> { T create(); } class Foo<T> { private T x; public <F extends FactoryI<T>> Foo(F factory) { x = factory.create(); } } // 对于不是自己定义的Java对象创建 class IntegerFactory implements FactoryI<Integer> { @Override public Integer create() { return new Integer(0); } } // 自定义的对象可以添加内部工厂方法或者内部工厂类 class Widget { public static class Factory implements FactoryI<Widget> { @Override public Widget create() { return new Widget(); } } } public class FactoryConstraint { public static void main(String[] args) { new Foo<Integer>(new IntegerFactory()); new Foo<Widget>(new Widget.Factory()); } }
- 模板方法方式
abstract class GenericWithCreate<T> { final T element; public GenericWithCreate() { element = create(); } abstract T create(); } class X { } class Creator extends GenericWithCreate<X> { @Override X create() { return new X(); } void f() { System.out.println(element.getClass().getSimpleName()); } } public class CreatorGeneric { public static void main(String[] args) { Creator creator = new Creator(); creator.f(); } }