interface BusinessEntity<E extends BusinessEntity<E>> { } interface EntityId<E extends BusinessEntity> { E getEntity(); } class MyTest { <T extends BusinessEntity<T>> T getEntity(EntityId<T> defaultValue) { return getEntityID(defaultValue).getEntity(); } public <P extends EntityId<?>> P getEntityID(P defaultValue) { return null; } }