¿Tengo que lidiar con la situación en la que se llama a los métodos privados a través de la reflexión?

12

Al crear una biblioteca, ¿debo asegurarme de que los métodos privados deben funcionar como se espera cuando no son llamados por otros métodos de la misma clase, sino por otra biblioteca a través de la reflexión ?

Por ejemplo, si un método privado private DoSomething(int number) espera que:

  • number es un entero positivo que no es cero, y:
  • una variable privada string abc no es nula y no es una cadena vacía,

y completamente, fallas feas si esas dos condiciones no coinciden, ¿debo manejar esas fallas incluso si sé que todos los métodos en la clase siempre asignarán un valor no vacío a abc ¿antes de llamar a DoSomething y pasar un entero positivo que no sea cero a este método?

En otras palabras, es el código que no está protegido contra llamadas inseguras a través de la reflexión puede considerarse como código de baja calidad , o pertenece a la persona que llama que utiliza la reflexión para garantizar que la llamada no romper algo?

Nota: mi pregunta cubre solo un conjunto estándar de bibliotecas. Esto no cubre el código que debe ser altamente seguro (es decir, cuando alguien puede estar interesado en usar la reflexión para que se comporte inesperadamente o se bloquee).

¹ Porque la clase está documentada correctamente, porque hay suficientes pruebas unitarias para asegurarse de que cualquier otro desarrollador no romperá este método, etc.

    
pregunta Arseni Mourzenko 16.08.2011 - 03:55

3 respuestas

16

Al marcar su método como privado, estableció sus intenciones y un contrato. Al utilizar la reflexión, un código de cliente puede optar por romper este contrato y, en consecuencia, tendrá que soportar las consecuencias. Lo mismo sucede con los protocolos, para que las cosas funcionen, se deben seguir las reglas o sucederán cosas malas.

El mismo problema puede ocurrir con otros lenguajes como C ++, donde vi cosas como

#define private public

En resumen: NO es necesario que enfrente estas situaciones, la persona que llama debe saberlo mejor.

    
respondido por el Otávio Décio 16.08.2011 - 04:17
5

Si alguien está utilizando la reflexión para llamar a sus métodos privados, es una señal de que alguien está haciendo algo mal. O está usando el código de maneras para las que no fue diseñado, o está ocultando demasiado el funcionamiento interno y entorpeciendo la API.

Pero suena como si aún no estuvieras en esa etapa, y solo estás tratando de ser preventivo. Así que mi opinión es: no te preocupes por eso. Un método privado debe ser considerado fuera de los límites; Si alguien viola esos límites deliberadamente, entonces es su problema si las cosas explotan.

    
respondido por el Mike Baranczak 16.08.2011 - 06:11
0

Bueno, siempre es una buena idea validar las variables no locales antes de usarlas, pero aparte de eso, no me preocuparía. Como dijeron los demás, usted ha establecido sus intenciones al hacer que el método sea privado en primer lugar; Cualquiera que lo llame desde fuera de tu clase tiene cero garantías. Cuando trabajo en Java, ni siquiera pongo comentarios javadoc en mis métodos privados, porque no quiero que otros desarrolladores sepan que están ahí.

    
respondido por el TMN 16.08.2011 - 14:10

Lea otras preguntas en las etiquetas