class Cast<T> implements SemElement { { final SemKey<? extends Cast> key = null; final Cast semElement = getSemElement(key); } public <T extends SemElement> T getSemElement(SemKey<T> key) { return null; } class SemKey<T extends SemElement> {} } interface SemElement {}