Em 1998, Philip Wadler sugeriu uma diferença entre interfaces estáticas e não estáticas.
Até onde posso ver, a única diferença em tornar uma interface não estática é que agora ela pode incluir classes internas não estáticas; portanto, a alteração não invalidaria nenhum programa Java existente.
Por exemplo, ele propôs uma solução para o Problema da Expressão , que é a incompatibilidade entre expressão como "quanto sua linguagem pode expressar", por um lado, e expressão como "os termos que você está tentando representar em sua linguagem", por outro lado. .
Um exemplo da diferença entre interfaces aninhadas estáticas e não estáticas pode ser visto em seu código de amostra :
// This code does NOT compile
class LangF<This extends LangF<This>> {
interface Visitor<R> {
public R forNum(int n);
}
interface Exp {
// since Exp is non-static, it can refer to the type bound to This
public <R> R visit(This.Visitor<R> v);
}
}
Sua sugestão nunca chegou ao Java 1.5.0. Portanto, todas as outras respostas estão corretas: não há diferença para interfaces aninhadas estáticas e não estáticas.