Un collègue et moi avons un désaccord sur un scénario particulier. Nous avons un objet Serializable
qui a une méthode toString()
. Ce toString()
est implémenté en appelant le ReflectionToStringBuilder
d'Apache. Quelque chose comme ceci:Appel de méthode statique dans un objet sérialisable
public class Foo implements Serializable {
// bunch of instance variables, getters and setters ...
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this);
}
}
Nous n'avons aucun contrôle sur la façon dont ces objets sont transmis. Dans notre application particulière, nous pourrions les transmettre via des appels RMI, HTTP POST (après avoir écrit en tant que chaîne JSon), via JMS, ou via d'autres protocoles.
Maintenant, le cas de chaîne JSon ne devrait pas importer car il sera envoyé sous forme de chaîne afin que les détails d'implémentation de la méthode toString()
n'a pas d'importance. Mais pour (certains des) autres protocoles, nous nous attendrions à sérialiser l'objet lui-même.
Une méthode d'une classe Serializable peut-elle appeler une méthode statique et être toujours (fonctionnellement) sérialisable? Il compile bien, bien sûr - mais peut-il encore être envoyé à travers le fil? Va-t-il échouer à désérialiser si le service de réception n'a pas la classe de la méthode statique sur son chemin de classe?
Que diriez-vous de le tester? Qu'est-ce qui est sérialisé lors de l'envoi d'un objet sur le réseau, le code d'octet de la classe (que le récepteur a déjà dans son classpath), ou l'état de l'objet (que le récepteur ne connaît pas)? –
Comment le service de réception peut-il avoir la classe mais pas la classe de la méthode statique? (demande en fait). Je pensais que quelle que soit la façon dont vous partagez la classe Serializable entre les services (qu'ils aient tous une bibliothèque ou que vous ayez dupliqué la classe dans chaque service), aucune bibliothèque externe ne doit-elle figurer dans le chemin de classe du code même compiler? – Ishnark
Vous pouvez trouver une très bonne description à ce sujet [Règles de sérialisation statiques Java?] (Https: // stackoverflow.com/questions/6429462/java-static-serialization-rules) –