Archivo de Etiquetas de 'programación'

Java: cambiar el valor de un atributo privado de un objeto

En Java a veces es necesario cambiar el valor de un atributo privado de un objeto. Por suerte, la reflexión nos permite hace esto de forma sencilla. El código, como vereis, no puede ser más simple:

public static void setField (Object o, String fieldName, Object newValue)
	throws IllegalArgumentException, IllegalAccessException {
	// Get all the object class fields
	final Field fields[] = o.getClass().getDeclaredFields();
	// Search the requested field
	for (int i = 0; i < fields.length; ++i)
		// If found, set its new value
		if (fieldName.equals(fields[i].getName())) {
			boolean accesible = fields[i].isAccessible();
			fields[i].setAccessible(true);
			fields[i].set(o, newValue);
			fields[i].setAccessible(accesible);
		}
}

Un sencillo código para hacer la prueba puede ser el siguiente, que juega con el atributo privado hash de la clase String:

public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
	String s = new String("abc");
	System.out.println("hashcode: " + s.hashCode());
	setField(s, "hash", 30);
	System.out.println("hashcode: " + s.hashCode());
}

Jamie Zawinski dijo

Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems.

Jamie Zawinski, en comp.lang.emacs.

O, traduciendo al español,

Algunas personas, al enfrentarse a un problema, piensan “Ya lo tengo, usaré una expresión regular”. En ese momento, tienen dos problemas.

Cualquier informático da (o debería) dar fé :-D .

Una práctica chula (robots y torres de Hanoi)

Hace no mucho Jose y yo hemos terminado una práctica muy interesante. Se trata de programar una librería para manejar un brazo industrial “de juguete” (por tamaño, más que nada), y posteriormente usar esa librería para hacer una demostración (el brazo robótico resuelve el juego de las torres de Hanoi para 3 discos. La librería y el acceso al hardware del robot está implementado usando el lenguaje ADA con las extensiones RTEMS para sistemas de tiempo real. Podeis ver unos vídeos de la demostración (aunque no salió totalmente bien y no es la última versión, pero mola igual) en los siguientes enlaces:

http://www.zhube.com/video/view.php?video=557cbbec3b3152f59e5e7d68b4ab3597 (xvid)
http://video.google.com/videoplay?docid=5069371922354340859 (flash)

o directamente en esta página, (por si me estais leyendo a través de sindicación), también en flash, aunque sin sonido:

EDITO: ¡Por lo visto el flash si tiene sonido! Así puedes oir los motorcillos del robot, cuyo sonido es la mar de interesante. Se lo curran los de google ;-) EDITO (26-02-2006): Al final, hemos sacado un 7 en la asignatura en cuestión :-D