No GWT, por que um método não deve retornar uma interfac

Emeste vídeo do Google IO 2009, o apresentador diz rapidamente que assinaturas de métodos devem retornar tipos concretos em vez de interface

Pelo que ouvi no vídeo, isso tem algo a ver com o compilador GWT Java para Javascrip

Qual é a razão por trás dessa escolha?O que a interface na assinatura do método faz com o compilado Quais métodos podem retornar interfaces em vez de tipos concretos e quais são melhores para retornar instâncias concreta

 Javier Ferrero19 de mai de 2011 15:42
Tem a ver com serialização RPC. Vejo stackoverflow.com / perguntas / 3059787 /…
 Peter L19 de jun de 2013 06:06
Observe ou após os 7 minutos da apresentação. O orador não sabe exatamente por que está fazendo isso. Ele chama isso de 'superstição'.

questionAnswers(2)

QuestionSolution

Isso tem a ver com o gwt-compiler, como você diz corretamente. EDIT: No entanto, como Daniel observou em um comentário abaixo, isso não se aplica ao compilador gwt em geral, mas apenas ao usar o GWT-RP

Se você declarar List em vez de ArrayList como o tipo de retorno, o gwt-compiler incluirá a hierarquia de listas completa (ou seja, todos os tipos que implementam List) em seu código compilado. Se você usar ArrayList, o compilador precisará incluir apenas a hierarquia ArrayList (ou seja, todos os tipos que implementam ArrayList - que geralmente é apenas o próprio ArrayList). Usando uma interface em vez de uma classe concreta, você pagará uma multa em termos de tempo de compilação e tamanho do código gerado (e, portanto, a quantidade de código que cada usuário precisa baixar ao executar seu aplicativo).

Você também estava perguntando o motivo: se você usa a interface (em vez de uma classe concreta), o compilador não sabe em tempo de compilação quais implementações dessas interfaces serão usadas. Assim, inclui todas as implementações possíveis.

Com relação à sua última pergunta: todos os métodos PODEM ser declarados para retornar a interface (é isso que você mencionou, certo?). No entanto, a penalidade acima se aplica.

E, a propósito: Pelo que entendi, esse problema não se restringe aos métodos. Aplica-se a todas as declarações de tipo: variáveis, parâmetros. Sempre que você usa uma interface para declarar algo, o compilador incluirá a hierarquia completa de subinterfaces e classes de implementação. (Então, obviamente, se você declarar sua própria interface com apenas uma ou duas classes de implementação, não sofrerá uma grande penalidade. É assim que eu uso as interfaces no GWT.)

Em resumo: use classes concretas sempre que possíve

(Pequena sugestão: ajudaria se você desse o carimbo de hora ao se referir a um vídeo.)

 Daniel Kurka19 de mai de 2011 16:51
o código inchaço é apenas para classes usadas na geração de código (por exemplo, GWT-RPC). Em geral, o compilador NÃO incha ao usar interfaces
 Stefan19 de mai de 2011 17:29
Daniel, você está certo! Esqueci completamente que alguém poderia usar o GWT sem o GWT-RP
 Lavie Tobey09 de mar de 2015 18:34
@ danielkurka - Você sabe se esse inchaço da interface GWT-RPC ainda é um problema nas versões mais recentes do GW
 displayname23 de mar de 2016 19:58
Isso ainda é verdade para o 2.8.

Esta e outras dicas de desempenho foram apresentadas no Google IO 2011 - GWT de alto desempenho.

No ponto de 7 minutos, o speak aborda 'RPC Type Explosion':

or algum motivo, pensei que o compilador GWT o otimizaria novamente, mas parece que eu estava enganad

 displayname23 de mar de 2016 19:58
Isso ainda é verdade para o 2.8.

yourAnswerToTheQuestion