If there is a Java Class:
public class DummyTemplate<S, D extends DummyTemplate<S,D>> { S value; D next; public DummyTemplate(S value, D next) { super(); this.value = value; this.next = next; } public static DummyTemplate<String, DummyTemplate> factory(){ return new DummyTemplate<String, DummyTemplate>(null, null); } } Error: Bound mismatch: The type DummyTemplate is not a valid substitute for the bounded parameter <D extends DummyTemplate<S,D>> of the type DummyTemplate<S,D> although this is a valid type substitution. Where type D is set so that factory() returns exactly the type it needs: when you create a subclass, you declare
public class DummyTemplateSubclass<S, D extends DummyTemplateSubclass<S,D>> extends DummyTemplate<S, D>{ The question is how to define the type DummyTemplate<String, DummyTemplate> , if you constantly need to specify the template recursively?