2012-07-27 20 views
5

En el desarrollo de software todos estamos utilizando las bibliotecas por parte de los proveedores de software. Considere en la clase A que hay cuatro funciones a saber, x, y, z. Solo quiero que mi equipo de desarrollo evite usar la función x. Entonces, en lugar de decirles que no los usen, encontré una idea. Heredar la clase y anular todas las funciones y para la función x se lanza una excepción de método no soportada y para el resto estoy llamando a los métodos súper. También encontré un problema, los desarrolladores pueden usar directamente la clase base A, cómo evitar que la clase A se use directamente. Encontré una funcionalidad similar en OSGi, los paquetes lib pueden traerse y luego no exportarse, etc. ¿Hay alguna forma de lograr esto es Java?Reutilización de bibliotecas Java

+0

Supongo que no puede editar la fuente? – Jivings

+4

Subclass it y lanzar una excepción, IToldYouNotToUseThisFunctionException en la primera línea de la función. – Siddharth

+0

es posible que desee echar un vistazo a SecurityManager de Java y esta [post StackOverflow] [1] [1]: http://stackoverflow.com/questions/5486797/how-to-prevent-public- methods-from-being-called-from-specific-classes/5490106 # 5490106 – Korgen

Respuesta

0

Puede editar el archivo de la clase de biblioteca en el editor hexadecimal y modificar su modificador de acceso del público al paquete privado. También puedes cambiarle el nombre y luego usar la herencia para envolver esta clase. Here puede encontrar la especificación del archivo de clase. Una vez que he probado esta técnica, sustituyo la clase de controlador jdbc con la clase wraper, que proporciona un registro adicional y otros trucos útiles.

+0

La mayoría de los acuerdos de licencia prohibirán editar los "binarios", ¿o no? – aRestless

+0

No soy un experto en licencias, pero ¿algunos de ellos aceptan editar binarios con fines de compilación/prueba? En este caso, las bibliotecas de producción serán originales. – gkuzmin

2

Supongo que existen revisiones de código por estos motivos. Considere la situación en la que no puede editar la fuente de un tercero, ¿qué haría? Como Siddharth dice, subclasifícalo y lanza una excepción significativa y documentala con motivos claros. Si alguien está usando la clase base incluso después de eso, la mayoría no puede ser por ignorancia, pero puede ser por curiosidad. Ese tipo de cosas se puede apreciar personalmente y para aprender, pero para el desarrollador de sake, el proyecto debe seguir las pautas.

1

Creo que el simple hecho de decirle a los desarrolladores qué hacer es preferible a una solución de software compleja. A veces lo simple es mejor.

Pero, si insiste en seguir por este camino, puede aplicar sus estándares de arquitectura usando aspectos si es usuario de Spring. Teje los métodos ofensivos con un aspecto que lanza una excepción si son llamados.

0

Hay una variedad de herramientas que comprueban el código fuente para la adherencia a ciertas normas, como el formato, código muerto, convenciones de nomenclatura para las variables etc. Los populares para Java incluyen la Maven Enforcer plugin, checkstyle y PMD.

Esto podría permitirle escribir una regla que prohíba ciertas llamadas a métodos. Entonces puede verificar automáticamente en el momento de la compilación. Por lo que puedo decir, lamentablemente ninguna de las herramientas anteriores admite "llamadas a métodos ilegales" listas para usar; sin embargo, al menos para PMD escribir nuevos cheques es bastante simple.