Question

Est-il possible (utilisant la réflexion je l'espère) que je peux faire un objet instancié immuable ainsi que toutes ses propriétés publiques ? J'ai une classe de quelqu'un codebase d'autre (pas de source disponible) que je dois utiliser et je veux essentiellement une exception à levée si tout morceau de code essaie partout d'appeler un setter public dans cette classe après qu'il a été instancié.

Note: Je ne veux pas créer un objet wrapper autour de la classe afin de mettre en œuvre. Je suis paresseux.

Était-ce utile?

La solution

Non il n'y a pas par réflexion. Les définitions de type ne peuvent pas être modifiés lors de l'exécution par la réflexion et par conséquent, il ne peut pas être utilisé comme un dispositif pour faire un type immuable.

Mais la réflexion peut être utilisé pour violer immuabilité d'un type. Par exemple, il est possible de définir des propriétés marquées par une longue réflexion en lecture seule après le constructeur a été exécuté.

Autres conseils

Je trouve difficile de croire que vous êtes prêt à introduire le code de réflexion pour faire quelque chose qui peut être simplement résolu avec une classe wrapper.

Un petit investissement de votre temps vous permettra d'économiser beaucoup de temps douloureux plus tard, quand vos pauses de code de réflexion ou nécessite une modification. Une classe d'emballage est simple, facile à mettre en œuvre, est de type sécurisé et sera logique à d'autres développeurs sur la route. Ne laissez pas la paresse dicter vos choix architecturaux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top