Java - Referencia a un objeto mediante contenido de string

 
Vista:

Referencia a un objeto mediante contenido de string

Publicado por Luis (4 intervenciones) el 15/05/2014 01:03:38
Tengo una variable:

String variable = "objeto1";

Y me gustaría llamar a los métodos de un objeto que se llama objeto1 usando el contenido de la variable string, es decir:

Lo normal sería esto:
objeto1.metodo();

Y lo que yo quiero es hacer esto:
variable.metodo();

Es posible de alguna manera? Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 686
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Referencia a un objeto mediante contenido de string

Publicado por xve (345 intervenciones) el 15/05/2014 08:10:36
Hola Luis, seria algo así:

1
2
Method variable = Class.getDeclaredMethod("objeto1");
variable.metodo();

Coméntanos si te sirve, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Referencia a un objeto mediante contenido de string

Publicado por Luis (4 intervenciones) el 15/05/2014 13:30:41
Pues no consigo hacerlo... Si no es mucha molestia podrías poner un pequeño ejemplo? Llevo muy poco con esto... Disculpa las molestias y gracias por la rápida respuesta!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Referencia a un objeto mediante contenido de string

Publicado por UnoPorAhi (128 intervenciones) el 15/05/2014 16:30:01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.lang.reflect.Method;
 
public class CallByName {
    public void saludo() {
        System.out.println("Hola desde metodo");
    }
 
    public static void main(String[] args) throws Exception {
        Object obj = Class.forName("CallByName").newInstance();
        Method metodo = obj.getClass().getMethod("saludo");
 
        metodo.invoke(obj);
    }
}


Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Referencia a un objeto mediante contenido de string

Publicado por Luis (4 intervenciones) el 15/05/2014 16:47:45
No entiendo el ejemplo que me has puesto, no se si no me he explicado bien:

A ver, en concreto el problema es este:
Tengo varios objetos iguales con los mismos métodos a los que les quiero dar valores diferentes, Los objetos se llaman "dia1, dia2, dia3........."

Fácilmente podría llamar a todos los métodos de los objetos "dia" de la siguiente forma:

dia1.setText("Soy el dia 1");
dia2.setText("Soy el dia 2");
dia3.setText("Soy el dia 3");
...


Pero me gustaría hacerlo en un bucle FOR de la siguiente manera:

String Barrido;

for (int i=1, i<20, i++) {
Barrido = "dia" + i;
Barrido.setText("Soy el dia "+i);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Referencia a un objeto mediante contenido de string

Publicado por UnoPorAhi (128 intervenciones) el 15/05/2014 17:28:34
????? Y para que existen los arrays?

Lo que quieres no se puede hacer en java, ni siquiera usando reflexion. Eso seria factible si trabajas con un lenguaje interpretado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Referencia a un objeto mediante contenido de string

Publicado por Luis (4 intervenciones) el 15/05/2014 17:49:32
Ok, llevo 2 días mirando java.... En otros lenguajes se puede hacer sin problemas y aquí no encontraba la manera. Miraré los arrays.
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhonnathan Emilio Cardona Saineda

Referencia a un objeto mediante contenido de string

Publicado por Jhonnathan Emilio Cardona Saineda (328 intervenciones) el 15/05/2014 18:27:42
Hola, muchas gracias por la pregunta ya que he aprendí unas cositas demás. Esto lo realice a partir del código de unoPorAhy y por ti.
Suponiendo que tienes clases diferentes.
Las clases Dia1, Dia... están en el paquete principal.
1
2
3
4
5
6
7
8
9
10
11
12
try {
 
			for (int i = 1; i <= 3; i++) {
				Object obj = Class.forName("principal.Dia" + i).newInstance();
				Method method1=obj.getClass().getMethod("setText",String.class);
				Method method2=obj.getClass().getMethod("getText");
				method1.invoke(obj,"Soy el dia "+i);
				System.out.println(method2.invoke(obj));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

Lo otro es que dices que son del mismo objeto osea que no son clases diferentes, si puede ser con un array
1
2
3
4
5
6
Dia1 dias []= new Dia1[5];
			for (int i = 0; i < dias.length; i++) {
				dias[i]= new Dia1();
				dias[i].setText("Soy el dia "+(i+1));
				System.out.println(dias[i].getText());
			}
Espero te sirva,
Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Referencia a un objeto mediante contenido de string

Publicado por UnoPorAhi (128 intervenciones) el 15/05/2014 22:00:54
Buenas,

Si, en otros lenguajes como PHP o JavaScript es posible de hacerlo fácilmente. Sin embargo Java es compilado y tiene tipado fuerte y estático. Por reflexión si sería posible llegar a hacerlo (antes mentí un poquito), pero quedaría un código muy complejo y difícil de adaptar y modificar, además de que la reflexión tiene un impacto enorme en el rendimiento.

Lo mejor es que cada vez que crees una instancia de dia y la metas en una lista para luego recorrerla cuando quieras.
Te pongo un prototipo (no lo tomes de forma literal, es solo una muestra que acabo de escribir y no se siquiera si compila):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class DemoDias {
    private List<Dia> dias = new ArrayList()<>;
 
    public getDias() {
         return dias;
    }
 
    public agregarDias() {
        dias.add(new Dia("Lunes"));
        dias.add(new Dia("Martes"));
        dias.add(new Dia("Miercoles"));
    }
 
    public static void main() {
          DemoDias demoDias = new DemoDias();
          demoDias.crearDias();
          for (Dia dia : demoDias.getDias()) {
               dia.setText("Soy el dia" + dia.getName()):
          }
     }
}

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar