Différence entre ArrayList () et ArrayList () {}

Quelle est la différence entre ces deux. Pourquoi ce dernier crée-t-il une nouvelle classe sérialisable?

new ArrayList() 

crée une nouvelle ArrayList vide

 new ArrayList(){} 

Eclipse montre: The serializable class does not declare a static final serialVersionUID field of type long

Dans le premier exemple, vous créez une instance ArrayList . Dans ce dernier cas, vous créez une instance d’une sous-classe anonyme de ArrayList . Généralement, vous substituez une ou plusieurs méthodes de la sous-classe, sinon la création d’une telle méthode n’a pas beaucoup d’intérêt. Comme John Skeet le fait remarquer, il existe une seule et même raison de créer une sous-classe anonyme de type générique, voir sa réponse .

Eclipse vous avertit que, pour respecter les spécifications Serializable ( ArrayList est Serializable , toutes ses sous-classes le sont également), vous devez définir un serialVersionUID unique dans la sous-classe à partir duquel le processus de désérialisation peut garantir que la définition de classe n’a pas changé de manière significative. depuis qu’il a été sérialisé (de manière significative == vous avez vous-même décidé que la nouvelle définition était incompatible avec l’ancienne, vous pouvez donc l’exprimer en modifiant le serialVersionUID ). Si vous ne voulez jamais sérialiser la liste, l’avertissement n’a pas d’importance.

Comme le dit Joonas, dans le deuxième exemple, vous créez une classe interne anonyme. Cependant, il existe une raison de le faire même lorsque vous ne redéfinissez aucune méthode, etc.: cela vous permet de déterminer le type d’élément de ArrayList au moment de l’exécution, car la superclasse de la classe interne anonyme est ArrayList plutôt que juste ArrayList .

C’est ainsi que fonctionnent les littéraux de type dans Guice. C’est un peu un bidouillage laid, mais il fait le travail …