utilizar tabbedpane programacion pestañas pestaña personalizar como cambiar java unit-testing reflection

java - tabbedpane - Establecer el valor del campo estático privado



personalizar jtabbedpane java (2)

Básicamente, el problema es su método de utilidad, que asume que tiene una instancia. Es razonablemente fácil establecer un campo estático privado; es exactamente el mismo procedimiento que para un campo de instancia, excepto que especifique null como instancia. Lamentablemente, su método de utilidad utiliza la instancia para obtener la clase y requiere que no sea nula ...

Me haría eco de la advertencia de Tom: no hagas eso. Si esta es una clase que tienes bajo tu control, crearía un método de nivel de paquete:

void setFooForTesting(Bar newValue) { foo = newValue; }

Sin embargo, aquí hay una muestra completa si realmente quieres establecerla con la reflexión:

import java.lang.reflect.*; class FieldContainer { private static String woot; public static void showWoot() { System.out.println(woot); } } public class Test { // Declared to throw Exception just for the sake of brevity here public static void main(String[] args) throws Exception { Field field = FieldContainer.class.getDeclaredField("woot"); field.setAccessible(true); field.set(null, "New value"); FieldContainer.showWoot(); } }

Quiero establecer el valor de un campo privado usando reflexión para pruebas de unidades.

El problema es que ese campo es estático.

Esto es lo que estoy trabajando:

/** * Use to set the value of a field you don''t have access to, using reflection, for unit testing. * * Returns true/false for success/failure. * * @param p_instance an object to set a private field on * @param p_fieldName the name of the field to set * @param p_fieldValue the value to set the field to * @return true/false for success/failure */ public static boolean setPrivateField(final Object p_instance, final String p_fieldName, final Object p_fieldValue) { if (null == p_instance) throw new NullPointerException("p_instance can''t be null!"); if (null == p_fieldName) throw new NullPointerException("p_fieldName can''t be null!"); boolean result = true; Class<?> klass = p_instance.getClass(); Field field = null; try { field = klass.getDeclaredField(p_fieldName); field.setAccessible(true); field.set(p_instance, p_fieldValue); } catch (SecurityException e) { result = false; } catch (NoSuchFieldException e) { result = false; } catch (IllegalArgumentException e) { result = false; } catch (IllegalAccessException e) { result = false; } return result; }

Me doy cuenta de que esto probablemente ya haya sido respondido en SO, pero mi búsqueda no lo hizo ...


Simplemente pase null para el argumento instancia de objeto. Asi que:

field.set(null, p_fieldValue);

Esto te permitirá configurar el campo estático.