¿Cómo lograr compilar de esta manera?

Iniciado por Lopardo, 30 Octubre 2007, 03:25 AM

0 Miembros y 1 Visitante están viendo este tema.

Lopardo


Bueno hace tiempo toque este tema un poco, solo que ahora vengo con unas cuantas evidencias por así decirlo y bueno espero que en conjunto encontremos la solución a este caso muy particular y realmente extraño, pensé en agregar este mensaje al mismo tema anterior, pero leí unas letras en rojo que decían que habían pasado más de 60 días y bueno preferí crear uno nuevo (bueno en realidad me lo aconsejaba el mensaje, eso creo).

¿Cómo es posible que un método tenga campos con el mismo nombre y métodos con el mismo nombre?


Bueno he intentado compilar clases con algún error y no lo he conseguido. Cuando digo error me refiero a métodos con el mismo nombre (no sobrecargados), es decir, reciben los mismos parámetros ambos y no importa lo que retorna. Mi pregunta es, ¿Cómo se logró compilar esta clase?, se supone que al codificarla en cualquier editor se detectaría el error y no permitiría compilarla, corríjanme si me equivoco.

Se estarán preguntando cual es mi problema con eso, bueno mi problema es que tengo unas cuantas *.class y me gustaría modificarle alguna parte del código, pero al decompilar la clase ya no podré compilarla de nuevo porque me daría error.

¿Cuál creen que sería la solución?.... Claro, aparte de codificar la clase completa, ya que mi idea es hacer uso de una clase cualquiera y modificarla.

Aquí les pongo unas imágenes:


Como se puede ver en la figura la clase "af.class" tiene varios campos con el nombre "a", en lo único que diferencia es en el tipo de dato, y como sabrán eso no es suficiente para ser permitido en java.


En esta otra se ven varios métodos con el nombre "a()", no entiendo como es posible tener varios métodos con igual nombre.

La clase ejemplo la obtuve de un jar que descomprimí e hice la pregunta, no tiene importancia su contenido, pero si la quieren la puedo subir.

Para que vean intente crear una clase con métodos iguales o campos iguales y verán que no se puede compilar porque da un error, bueno si alguien lo logra por favor diga la manera para aprenderla.

Tiempo si escribir, bueno espero su ayuda. Saludos a todos.
...de la sabiduría.

Casidiablo

Pues raro si es... el código es decompilado verdad?

Lopardo

Bueno la clase "af.class" no ha sido decompilada solo la saque del .jar y si la decompilas se puede ver que tiene métodos repetidos y todo lo que comente arriba...

Gracias.. Saludos.. Espero sus respuestas
...de la sabiduría.

egyware

valla vastante raro seguramente tiene una proteccion (ofuscacion creo), pero si lo sacaste de un jar solo el source o lo descompilaste, aunque no creo eso si alguien pudo haberlo colocado ahi para despistar (sin enojarse), porque yo sabia de java que solo se permitia methodos sobrecargados pero esto  :huh: :huh: :huh: hasta yo sigo despistado.
Ups ahora leyendo bien el mesaje como es eso posible??????!!! :o :o :o :o
porque no subes la clase como pa verla uno e indagar mas en eso

Lopardo

Bueno aquí les pongo una clase ejemplo que presenta tres métodos con igual nombre. http://www.miempresaaldia.com/Img%20principal/a.class

Bueno espero que se logre dar con la solución porque es bastante interesante.

Saludos a todos.
...de la sabiduría.

egyware

como duda crees que haya un error con las clases de java.lang.reflect que son las encargadas de leer nombre methodos de esa forma, algun bugs no conocido ????

Lopardo

Bueno eso que dices no lo sabia, voy a leer al respecto.. pero al decompilarlo se ve igual que al visualizarlo desde afuera, asi que dudo que ese sea el problema, de todas formas hay que leer.

Saludos.
...de la sabiduría.

Amab

#7
Ah, varios métodos con el mismo nombre en la misma clase. No lo había leído bien.

Aunque dices que tienes varios *.class, lo que me hace pensar que quizá sean varias subclases y una superclase, lo que me lleva a pensar que puede ser un caso de polimorfismo.

Un saludo.
Odio cuando intentas matar a alguien y se lo toma como algo personal.

Lopardo

#8
para que se vea mejor es algo así en una sola clase.


class ejemplo
{
  public ejemplo()
  {
    //Lo que sea.
  }
 
  public void metodo1()
  {
    //Lo que sea.
  }
 
  public int metodo1()
  {
     //Lo que sea.
  }

  public long metodo1()
  {
    //Lo que sea.
  }

  public void metodo1()
  {
     //Lo que sea.
  }
}

A eso me refiero en una sola clase hay varios métodos de igual nombre, también pueden ver el ejemplo que les puse en el link en uno de los mensajes anteriores, se llama "a.class".

Si intentara compilar esta clase daria error porque hay métodos repetidos, a eso me refiero.

Saludos
...de la sabiduría.

marioly

is not that difficult

usas genericos:



no es un efecto, ni es nada raro, es (como dijeron) un tipo de polimorfismo, haciendo esto el compilador tiene un modo de identificar cada metodo