class SOE { } abstract class VersionEntity, R extends Ref> implements Version{} interface Version, R extends Ref>{} abstract class RefEntity, R extends Ref> implements Ref {} interface Ref, R extends Ref>{} abstract class Node, GR extends NodeRef> extends VersionEntity {} abstract class NodeRef, GR extends NodeRef> extends RefEntity {} class D { void f() { Version v = new Node<?, ?>(){} v.hashCode(); } }