Qual é a sua opinião a respeito de inner classes?
Exemplo em um jogo:
Classe 1:
public class Main{
private GameManager manager;
private JFrame window;
...
public void createWindow(){
...
window.addKeyListener(manager.new Listener());
}
}
Classe 2:
public class GameManager{
...
class Listener implements KeyListener{
...
}
}
Acho que são a solução complicada para um problema simples, que poderia ter sido resolvido com “delegates”. (Essa é a opinião do sr. Anders Hejslberg, que designou esse recurso de “delegates” no J++, mas não é a opinião do sr. James Gosling, que obviamente defende “inner classes” até a morte.)
Veja o que a Kathy Sierra diz no livro de certificação Java 5 no início do capítulo a respeito de inner classes:
So what’s all the hoopla about inner classes? Before we get into it, we have to warn you (if you don’t already know) that inner classes have inspired passionate love ‘em or hate ‘em debates since first introduced in version 1.1 of the language. For once, we’re going to try to keep our opinions to ourselves here and just present the facts as you’ll need to know them for the exam. It’s up to you to decide how—and to what extent—you should use inner classes in your own development. We mean it. We believe they have some powerful, efficient uses in very specific situations, including code that’s easier to read and maintain, but they can also be abused and lead to code that’s as clear as a cornfield maze, and to the syndrome known as “reuseless”: code that’s useless over and over again.
Translation:
Então o que é que pega sobre classes internas? Antres de entrarmos no assunto, temos que avisá-lo (se você já não souber) que classes internas inspiraram apaixonados debates ame-as ou odeie-as desde que foram introduzidas na versão 1.1 da linguagem. Desta vez, nós tentaremos manter as nossas opiniões para nós e apenas apresentar os fatos conforme você precisará saber para o exame. Cabe a você decidir como - e em que extensão - você deve usar classes internas no seu próprio desenvolvimento. Sério. Nós acreditamos que elas têm alguns usos poderosos e eficientes em situações muito específicas, incluindo código que é mais fácil de ler e manter, mas elas também podem ser abusadas e levar a código que é tão claro quanto um labirinto, e a uma síndrome conhecida como “reinutibilidade”: código que é inútil de novo e de novo.