staticfinal Field i_field = field("i", false); staticfinal Field c_field = field("c", false); staticfinal Field b_field = field("b", false); staticfinal Field s_field = field("s", false); staticfinal Field l_field = field("l", false); staticfinal Field d_field = field("d", false); staticfinal Field f_field = field("f", false); staticfinal Field z_field = field("z", false); staticfinal Field o_field = field("o", false); staticfinal Field fi_field = field("fi", false); staticfinal Field fc_field = field("fc", false); staticfinal Field fb_field = field("fb", false); staticfinal Field fs_field = field("fs", false); staticfinal Field fl_field = field("fl", false); staticfinal Field fd_field = field("fd", false); staticfinal Field ff_field = field("ff", false); staticfinal Field fz_field = field("fz", false); staticfinal Field fo_field = field("fo", false);
staticfinal Field override_i_field = field("i", true); staticfinal Field override_c_field = field("c", true); staticfinal Field override_b_field = field("b", true); staticfinal Field override_s_field = field("s", true); staticfinal Field override_l_field = field("l", true); staticfinal Field override_d_field = field("d", true); staticfinal Field override_f_field = field("f", true); staticfinal Field override_z_field = field("z", true); staticfinal Field override_o_field = field("o", true); staticfinal Field override_fi_field = field("fi", true); staticfinal Field override_fc_field = field("fc", true); staticfinal Field override_fb_field = field("fb", true); staticfinal Field override_fs_field = field("fs", true); staticfinal Field override_fl_field = field("fl", true); staticfinal Field override_fd_field = field("fd", true); staticfinal Field override_ff_field = field("ff", true); staticfinal Field override_fz_field = field("fz", true); staticfinal Field override_fo_field = field("fo", true);
staticfinal Field si_field = field("si", false); staticfinal Field sc_field = field("sc", false); staticfinal Field sb_field = field("sb", false); staticfinal Field ss_field = field("ss", false); staticfinal Field sl_field = field("sl", false); staticfinal Field sd_field = field("sd", false); staticfinal Field sf_field = field("sf", false); staticfinal Field sz_field = field("sz", false); staticfinal Field so_field = field("so", false); staticfinal Field sfi_field = field("sfi", false); staticfinal Field sfc_field = field("sfc", false); staticfinal Field sfb_field = field("sfb", false); staticfinal Field sfs_field = field("sfs", false); staticfinal Field sfl_field = field("sfl", false); staticfinal Field sfd_field = field("sfd", false); staticfinal Field sff_field = field("sff", false); staticfinal Field sfz_field = field("sfz", false); staticfinal Field sfo_field = field("sfo", false);
staticfinal Field override_si_field = field("si", true); staticfinal Field override_sc_field = field("sc", true); staticfinal Field override_sb_field = field("sb", true); staticfinal Field override_ss_field = field("ss", true); staticfinal Field override_sl_field = field("sl", true); staticfinal Field override_sd_field = field("sd", true); staticfinal Field override_sf_field = field("sf", true); staticfinal Field override_sz_field = field("sz", true); staticfinal Field override_so_field = field("so", true); staticfinal Field override_sfi_field = field("sfi", true); staticfinal Field override_sfc_field = field("sfc", true); staticfinal Field override_sfb_field = field("sfb", true); staticfinal Field override_sfs_field = field("sfs", true); staticfinal Field override_sfl_field = field("sfl", true); staticfinal Field override_sfd_field = field("sfd", true); staticfinal Field override_sff_field = field("sff", true); staticfinal Field override_sfz_field = field("sfz", true); staticfinal Field override_sfo_field = field("sfo", true);
privatestatic Field field(String name, boolean suppressAccessCheck) { try {
Field f = Fields.class.getDeclaredField(name); if (suppressAccessCheck) {
f.setAccessible(true);
} return f;
} catch (ReflectiveOperationException e) { thrownew RuntimeException(e);
}
}
@DataProvider(name = "instanceFields") private Object[][] instanceFields() { returnnew Object[][]{ new Object[]{i_field}, new Object[]{c_field}, new Object[]{b_field}, new Object[]{s_field}, new Object[]{l_field}, new Object[]{d_field}, new Object[]{f_field}, new Object[]{z_field}, new Object[]{o_field}, new Object[]{override_i_field}, new Object[]{override_c_field}, new Object[]{override_b_field}, new Object[]{override_s_field}, new Object[]{override_l_field}, new Object[]{override_d_field}, new Object[]{override_f_field}, new Object[]{override_z_field}, new Object[]{override_o_field}, // final instance fields new Object[]{fi_field}, new Object[]{fc_field}, new Object[]{fb_field}, new Object[]{fs_field}, new Object[]{fl_field}, new Object[]{fd_field}, new Object[]{ff_field}, new Object[]{fz_field}, new Object[]{fo_field}, new Object[]{override_fi_field}, new Object[]{override_fc_field}, new Object[]{override_fb_field}, new Object[]{override_fs_field}, new Object[]{override_fl_field}, new Object[]{override_fd_field}, new Object[]{override_ff_field}, new Object[]{override_fz_field}, new Object[]{override_fo_field},
};
} privatestatic Fields INSTANCE = new Fields();
@DataProvider(name = "writeableFields") private Object[][] writeableFields() {
Fields obj = new Fields(); returnnew Object[][]{ // instance fields with and without setAccessible(true) new Object[]{i_field, obj, Integer.valueOf(10)}, new Object[]{c_field, obj, Character.valueOf('c')}, new Object[]{b_field, obj, Byte.valueOf((byte)1)}, new Object[]{s_field, obj, Short.valueOf((short)2)}, new Object[]{l_field, obj, Long.valueOf(1000)}, new Object[]{d_field, obj, Double.valueOf(1.2)}, new Object[]{f_field, obj, Float.valueOf(2.5f)}, new Object[]{z_field, obj, Boolean.valueOf(true)}, new Object[]{o_field, obj, "good-value"}, new Object[]{override_i_field, obj, Integer.valueOf(10)}, new Object[]{override_c_field, obj, Character.valueOf('c')}, new Object[]{override_b_field, obj, Byte.valueOf((byte)1)}, new Object[]{override_s_field, obj, Short.valueOf((short)2)}, new Object[]{override_l_field, obj, Long.valueOf(1000)}, new Object[]{override_d_field, obj, Double.valueOf(1.2)}, new Object[]{override_f_field, obj, Float.valueOf(2.5f)}, new Object[]{override_z_field, obj, Boolean.valueOf(true)}, new Object[]{override_o_field, obj, "good-value"}, // instance final fields with setAccessible(true) new Object[]{override_fi_field, obj, Integer.valueOf(10)}, new Object[]{override_fc_field, obj, Character.valueOf('c')}, new Object[]{override_fb_field, obj, Byte.valueOf((byte)1)}, new Object[]{override_fs_field, obj, Short.valueOf((short)2)}, new Object[]{override_fl_field, obj, Long.valueOf(1000)}, new Object[]{override_fd_field, obj, Double.valueOf(1.2)}, new Object[]{override_ff_field, obj, Float.valueOf(2.5f)}, new Object[]{override_fz_field, obj, Boolean.valueOf(true)}, new Object[]{override_fo_field, obj, "good-value"}, // static fields with and without setAccessible(true) new Object[]{si_field, null, Integer.valueOf(10)}, new Object[]{sc_field, null, Character.valueOf('c')}, new Object[]{sb_field, null, Byte.valueOf((byte)1)}, new Object[]{ss_field, null, Short.valueOf((short)2)}, new Object[]{sl_field, null, Long.valueOf(1000)}, new Object[]{sd_field, null, Double.valueOf(1.2)}, new Object[]{sf_field, null, Float.valueOf(2.5f)}, new Object[]{sz_field, null, Boolean.valueOf(true)}, new Object[]{so_field, null, "good-value"}, new Object[]{override_si_field, null, Integer.valueOf(10)}, new Object[]{override_sc_field, null, Character.valueOf('c')}, new Object[]{override_sb_field, null, Byte.valueOf((byte)1)}, new Object[]{override_ss_field, null, Short.valueOf((short)2)}, new Object[]{override_sl_field, null, Long.valueOf(1000)}, new Object[]{override_sd_field, null, Double.valueOf(1.2)}, new Object[]{override_sf_field, null, Float.valueOf(2.5f)}, new Object[]{override_sz_field, null, Boolean.valueOf(true)}, new Object[]{override_so_field, null, "good-value"},
};
}
// test null value only if it's primitive type try {
f.set(obj, null);
fail("expected IllegalArgumentException");
} catch (IllegalArgumentException e) { // expected
}
}
@DataProvider(name = "readOnlyFinalFields") private Object[][] readOnlyFinalFields() {
Object obj = INSTANCE; returnnew Object[][]{ // instance final fields new Object[]{fi_field, obj, Integer.valueOf(10)}, new Object[]{fc_field, obj, Character.valueOf('c')}, new Object[]{fb_field, obj, Byte.valueOf((byte)1)}, new Object[]{fs_field, obj, Short.valueOf((short)2)}, new Object[]{fl_field, obj, Long.valueOf(1000)}, new Object[]{fd_field, obj, Double.valueOf(1.2)}, new Object[]{ff_field, obj, Float.valueOf(2.5f)}, new Object[]{fz_field, obj, Boolean.valueOf(true)}, new Object[]{fo_field, obj, "good-value"}, // static final fields new Object[]{sfi_field, null, Integer.valueOf(10)}, new Object[]{sfc_field, null, Character.valueOf('c')}, new Object[]{sfb_field, null, Byte.valueOf((byte)1)}, new Object[]{sfs_field, null, Short.valueOf((short)2)}, new Object[]{sfl_field, null, Long.valueOf(1000)}, new Object[]{sfd_field, null, Double.valueOf(1.2)}, new Object[]{sff_field, null, Float.valueOf(2.5f)}, new Object[]{sfz_field, null, Boolean.valueOf(true)}, new Object[]{sfo_field, null, "good-value"}, new Object[]{override_sfi_field, null, Integer.valueOf(10)}, new Object[]{override_sfc_field, null, Character.valueOf('c')}, new Object[]{override_sfb_field, null, Byte.valueOf((byte)1)}, new Object[]{override_sfs_field, null, Short.valueOf((short)2)}, new Object[]{override_sfl_field, null, Long.valueOf(1000)}, new Object[]{override_sfd_field, null, Double.valueOf(1.2)}, new Object[]{override_sff_field, null, Float.valueOf(2.5f)}, new Object[]{override_sfz_field, null, Boolean.valueOf(true)}, new Object[]{override_sfo_field, null, "good-value"},
};
}
// test null value only if it's primitive type try {
f.set(obj, null);
fail("expected IllegalAccessException");
} catch (IllegalAccessException e) { // expected
}
}
@DataProvider(name = "finalInstanceFields") private Object[][] finalInstanceFields() { returnnew Object[][]{ new Object[]{fi_field, Integer.valueOf(10)}, new Object[]{fc_field, Character.valueOf('c')}, new Object[]{fb_field, Byte.valueOf((byte) 1)}, new Object[]{fs_field, Short.valueOf((short) 2)}, new Object[]{fl_field, Long.valueOf(1000)}, new Object[]{fd_field, Double.valueOf(1.2)}, new Object[]{ff_field, Float.valueOf(2.5f)}, new Object[]{fz_field, Boolean.valueOf(true)}, new Object[]{fo_field, "good-value"},
};
}
/* *TestField::setonafinalinstancefieldwitheitherabadreceiver *ornull.IllegalArgumentExceptionisthrownifthereceiverisof *abadtype.NullPointerExceptionisthrownifthereceiverisnull. *Thereceiverischeckedbeforetheaccesscheckisperformedand *alsobeforethevalueischecked.
*/
@Test(dataProvider = "finalInstanceFields") publicvoid testReceiverOnFinalField(Field f, Object value) {
assertTrue(Modifier.isFinal(f.getModifiers()));
Object badReceiver = new NegativeTest(); // set the field with a bad receiver with a good value try {
f.set(badReceiver, value);
fail("expected IllegalArgumentException");
} catch (IllegalArgumentException e) { // expected
} catch (IllegalAccessException e) { thrownew RuntimeException("Expected IllegalArgumentException but got: " + e.getMessage(), e);
}
// set the field with a bad receiver with a bad value
Object badValue = new NegativeTest(); try {
f.set(badReceiver, badValue);
fail("expected IllegalArgumentException");
} catch (IllegalArgumentException e) { // expected
} catch (IllegalAccessException e) { thrownew RuntimeException("Expected IllegalArgumentException but got: " + e.getMessage(), e);
}
// set the field with a null receiver with a good value try {
f.set(null, value);
fail("expected NullPointerException");
} catch (NullPointerException e) { // expected
} catch (IllegalAccessException e) { thrownew RuntimeException("Expected NullPointerException but got: " + e.getMessage(), e);
} // set the field with a null receiver with a bad value try {
f.set(null, badValue);
fail("expected NullPointerException");
} catch (NullPointerException e) { // expected
} catch (IllegalAccessException e) { thrownew RuntimeException("Expected NullPointerException but got: " + e.getMessage(), e);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.