Преодоление статического блока класса в java

Я пытаюсь расширить функциональность драйвера для какого-то устройства. Я не хочу менять код драйвера, но хочу добавить функциональные возможности, расширив существующий код для драйверов. Класс драйвера имеет статический блок, в котором определяется большинство переменных. Мне нужно добавить еще несколько переменных в статический блок класса драйвера, не изменяя исходный статический блок (может быть, с наследованием или каким-либо другим способом). Класс драйвера:

    package postilion.vfsc5000;


import java.io.PrintStream;
import java.util.Hashtable;
import postespos.core.message.Validator;
import postespos.core.message.stream.*;


public class VfSC5000Response extends StreamMessage
{
    public static class Field extends VfSC5000Request.Field
    {

        public static final String VERSION = "Application version";
        public static final String MTD = "Msg Type delimiter";
        public static final String TRACK_1 = "Track 1";
        public static final String TRACK_2 = "Track 2";
        public static final String TRACK_3 = "Track 3";
        public static final String RSP_CODE = "Response code";
        public static final String AID = "Application ID";
        public static final String PREF_NAME = "Preferred name";
        public static final String APP_LABEL = "Application label";
        public static final String CARDHOLDER_NAME = "Cardholder name";
        public static final String TRACK2_EQUIV = "Track 2 equivalent";
        public static final String PAN = "PAN";
        public static final String EXPIRY_DATE = "Expiry date";
        public static final String PAN_SEQUENCE = "PAN sequence number";
        public static final String AUTH_STATUS = "Authentication status";
        public static final String SIGN = "Sign";
        public static final String TVR = "TVR";
        public static final String TSI = "TSI";
        public static final String AUTH_RSP = "Authorisation response";
        public static final String CID = "Cryptogram information data";
        public static final String VALUE = "Value";
        public static final String VALUES = "Values";
        public static final String SCRIPT_RESULT = "Script result";
        public static final String SCRIPT_RESULTS = "Script results";
        public static final String OPERATION_STATUS = "Operation Status";
        public static final String ICC_PRESENCE = "ICC Presence";
        public static final String KEYPRESS = "Key pressed";
        public static final String FKI = "Function Key Indicator";
        public static final String PIN_LENGTH = "Pin Length";
        public static final String PIN_BLOCK_FORMAT = "Pin Block Format";
        public static final String PIN_BLOCK = "Pin Block";
        public static final String MK_ADDR_RSP = "MK present response";

        public Field()
        {
        }
    }

    public static class PacketRspCode
    {

        public static final String _00_SUCCESSFUL = "00";
        public static final String _01_INVALID_CMD = "01";
        public static final String _02_INVALID_DATA_FORMAT = "02";
        public static final String _03_MORE_PACKETS = "03";

    public static final String _04_PREV_STEP_MISSING = "04";
    public static final String _05_INVALID_CONFIG = "05";
    public static final String _06_TIMEOUT = "06";
    public static final String _07_TIMER_ERROR = "07";
    public static final String _08_CANCELLED = "08";
    public static final String _09_COMM_FAILURE = "09";
    public static final String _10_CHIP_RDR_FAILURE = "10";
    public static final String _20_USE_CHIP_READER = "20";
    public static final String _21_USE_MAG_STRIPE = "21";
    public static final String _22_CHIP_ERROR = "22";
    public static final String _23_CARD_REMOVED = "23";
    public static final String _24_CARD_BLOCKED = "24";
    public static final String _25_CARD_NOT_SUPPORTED = "25";
    public static final String _26_INVALID_APP = "26";
    public static final String _27_DO_ABSENT = "27";
    public static final String _28_DO_REPEAT = "28";
    public static final String _29_INVALID_PIN = "29";
    public static final String _30_PIN_LAST_CHANCE = "30";
    public static final String _31_PIN_RETRYLIMIT = "31";
    public static final String _32_TLVCOLLECTION_FULL = "32";
    public static final String _33_TLVFORMAT = "33";
    public static final String _34_INVALID_PDOL = "34";
    public static final String _35_INVALID_CDOL = "35";
    public static final String _36_INVALID_TDOL = "36";
    public static final String _37_INVALID_DDOL = "37";
    public static final String _38_INVALID_SDOL = "38";
    public static final String _39_AID_LIST_FULL = "39";
    public static final String _40_PSE_NOT_FOUND = "40";
    public static final String _41_ICC_DATA_MISSING = "41";
    public static final String _42_CANDIDATELIST_EMPTY = "42";
    public static final String _43_APDU_FORMAT = "43";
    public static final String _44_HASH_FAILED = "44";
    public static final String _45_BAD_TRACK2 = "45";
    public static final String _46_CERTIFICATE_EXPIRED = "46";
    public static final String _47_DIFF_AVN_ERR = "47";
    public static final String _48_SERVICE_NOT_ALLOWED = "48";
    public static final String _49_APP_NOTYET_EFFECTIVE = "49";
    public static final String _50_APP_EXPIRED = "50";
    public static final String _51_LOWER_LMT_EXCEED = "51";
    public static final String _52_UPPER_LMT_EXCEED = "52";
    public static final String _53_CVM_FAILED = "53";
    public static final String _54_UNRECOGNIZED_CVM = "54";
    public static final String _55_BAD_DATA_FORMAT = "55";
    public static final String _56_BAD_HASHALGO = "56";
    public static final String _57_BAD_IPKALGO = "57";
    public static final String _58_INVALID_LENGTH = "58";
    public static final String _59_TAG_NOTFOUND = "59";
    public static final String _60_INVALID_OFFSET = "60";
    public static final String _61_BAD_COMMAND = "61";
    public static final String _62_TAG_ALREADY_PRESENT = "62";
    public static final String _63_READ_RECORD_FAILED = "63";
    public static final String _64_EXPLICIT_SELEC_REQD = "64";
    public static final String _65_COND_NOT_SATISFIED = "65";
    public static final String _66_CSN_FAILURE = "66";
    public static final String _67_BAD_SLOT = "67";
    public static final String _68_BAD_LEN = "68";
    public static final String _69_NO_MEM = "69";
    public static final String _70_CAPK_ERROR = "70";
    public static final String _71_PIN_CONFIG_ERR = "71";
    public static final String _72_EST_TAB_ERR = "72";
    public static final String _73_MVT_TAB_ERR = "73";
    public static final String _74_SCRIPT_ERROR = "74";
    public static final String _75_LOG_ERROR = "75";
    public static final String _76_COMBINED_DDA_AC_GEN_REQD = "76";
    public static final String _77_COMBINED_DDA_AC_GEN_FAILED = "77";
    public static final String _78_CARD_INSERTED = "78";
    public static final String _97_UNRECOG_RETURN = "97";
    public static final String _98_UNEXPECTED_RETURN = "98";
    public static final String _99_FAIL = "99";

    public PacketRspCode()
    {
    }
}

public static class CtrlChar
{

    public static final char ETX = 3;
    public static final char FS = 28;

    public CtrlChar()
    {
    }
}

public static final class PacketType extends VfSC5000Request.PacketType
{

    public static final String _71_TRSFR_PIN_BLOCK = "71";
    public static final String _81_MSR_DATA = "81";

    public PacketType()
    {
    }
}


public VfSC5000Response()
{
    super(512, stream);
}

public static void main(String args[])
{
    try
    {
        VfSC5000ResponseModification vf_rsp = new VfSC5000ResponseModification();
        System.out.println(vf_rsp.describeStructure());
        vf_rsp.fromMsg("C2000008E5A1C24265C64788");
        System.out.println(vf_rsp);
        vf_rsp.fromMsg("C2000008E5A1C24265C6478800706010A03A4000000205070025800003010302003E0B0C0002084000122004EF482FC800400000090");
        System.out.println(vf_rsp);
        System.out.println(vf_rsp.getField("Response code"));
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

private static IStreamFormatter stream;
static final int MAX_LEN = 512;
protected static Hashtable pkt_rsp_code_ht;

static 
{
    StreamFormatterContainer msg = new StreamFormatterContainer();
    IStreamFormatter packet_type_2_byte = new StreamFormatterFieldFixed("Packet Type 2-byte", Validator.getAn(), 2);
    IStreamFormatter mtd = new StreamFormatterFieldFixed("Msg Type delimiter", ".");
    IStreamFormatter address = new StreamFormatterFieldFixed("Master Key Address", Validator.getN(), 1);
    IStreamFormatter key = new StreamFormatterFieldVar("Key", Validator.getHex(), 48, true);
    StreamFormatterContainer pkt_02 = new StreamFormatterContainer();
    pkt_02.add(address);
    pkt_02.add(key);
    StreamFormatterContainer pkt_04 = new StreamFormatterContainer();
    IStreamFormatter rsp = new StreamFormatterFieldFixed("MK present response", Validator.getAn(), 1);
    pkt_04.add(rsp);
    StreamFormatterContainer pkt_08 = new StreamFormatterContainer();
    pkt_08.add(rsp);
    StreamFormatterContainer pkt_13 = new StreamFormatterContainer();
    IStreamFormatter version = new StreamFormatterFieldFixed("Application version", Validator.getAns(), 32);
    pkt_13.add(version);
    StreamFormatterContainer pkt_71 = new StreamFormatterContainer();
    IStreamFormatter function_key_indicator = new StreamFormatterFieldFixed("Function Key Indicator", Validator.getN(), 1);
    IStreamFormatter pin_length = new StreamFormatterFieldFixed("Pin Length", Validator.getN(), 2);
    IStreamFormatter pin_block_format = new StreamFormatterFieldFixed("Pin Block Format", Validator.getN(), 2);
    IStreamFormatter pin_block = new StreamFormatterFieldVar("Pin Block", Validator.getHex(), 16, false);
    pkt_71.add(mtd);
    pkt_71.add(function_key_indicator);
    pkt_71.add(pin_length);
    pkt_71.add(pin_block_format);
    pkt_71.add(pin_block);
    StreamFormatterContainer pkt_72 = new StreamFormatterContainer();
    pkt_72.add(new StreamFormatterFieldFixed("Response code", Validator.getN(), 2));
    StreamFormatterContainer pkt_81 = new StreamFormatterContainer();
    IStreamFormatter track2 = new StreamFormatterFieldVar("Track 2", Validator.getAns(), 40, false, '\034');
    IStreamFormatter track1 = new StreamFormatterFieldVar("Track 1", Validator.getAns(), 79, false, '\034');
    IStreamFormatter track3 = new StreamFormatterFieldVar("Track 3", Validator.getAns(), 107, false, '\034');
    pkt_81.add(mtd);
    pkt_81.add(track2);
    pkt_81.add(track1);
    pkt_81.add(track3);
    StreamFormatterContainer pkt_poll = new StreamFormatterContainer();
    Hashtable pkt_2_ht = new Hashtable();
    pkt_2_ht.put("02", pkt_02);
    pkt_2_ht.put("04", pkt_04);
    pkt_2_ht.put("08", pkt_08);
    pkt_2_ht.put("13", pkt_13);
    pkt_2_ht.put("81", pkt_81);
    pkt_2_ht.put("71", pkt_71);
    pkt_2_ht.put("72", pkt_72);
    pkt_2_ht.put("ZZ", pkt_poll);
    IStreamFormatter msg_pkt_2_select = new StreamFormatterCase("Packet Type 2-byte", pkt_2_ht, null);
    StreamFormatterContainer msg_2_byte = new StreamFormatterContainer();
    msg_2_byte.add(packet_type_2_byte);
    msg_2_byte.add(msg_pkt_2_select);
    IStreamFormatter packet_type_3_byte = new StreamFormatterFieldFixed("Packet Type 3-byte", Validator.getAn(), 3);
    IStreamFormatter rsp_code = new StreamFormatterFieldFixed("Response code", Validator.getN(), 2);
    StreamFormatterContainer no_rsp = new StreamFormatterContainer();
    no_rsp.add(rsp_code);
    StreamFormatterContainer pkt_c00 = new StreamFormatterContainer();
    IStreamFormatter aid = new VfStreamFormatterFieldVarHex("Application ID", Validator.getHex(), new VfLengthFormatter(3, 16), false);
    IStreamFormatter pref_name = new VfStreamFormatterFieldVarHex("Preferred name", Validator.getHex(), new VfLengthFormatter(3, 16), false);
    IStreamFormatter app_label = new VfStreamFormatterFieldVarHex("Application label", Validator.getHex(), new VfLengthFormatter(3, 16), false);
    StreamFormatterContainer c00_rsp = new StreamFormatterContainer();
    c00_rsp.add(rsp_code);
    c00_rsp.add(aid);
    c00_rsp.add(pref_name);
    c00_rsp.add(app_label);
    IStreamFormatter c00_peek = new StreamFormatterPeek(0, "00", null, c00_rsp, no_rsp, "Application ID", c00_rsp, no_rsp);
    pkt_c00.add(c00_peek);
    StreamFormatterContainer pkt_c01 = new StreamFormatterContainer();
    IStreamFormatter service_code = new VfStreamFormatterFieldVarHex("Service code", Validator.getHex(), new VfLengthFormatter(3, 3), false);
    IStreamFormatter cardholder_name = new VfStreamFormatterFieldVarHex("Cardholder name", Validator.getAns(), new VfLengthFormatter(3, 26), false);
    IStreamFormatter track2_equiv = new VfStreamFormatterFieldVarHex("Track 2 equivalent", Validator.getHex(), new VfLengthFormatter(3, 37), false);
    IStreamFormatter pan = new VfStreamFormatterFieldVarHex("PAN", Validator.getHex(), new VfLengthFormatter(3, 19), false);
    IStreamFormatter expiry_date = new VfStreamFormatterFieldVarHex("Expiry date", Validator.getHex(), new VfLengthFormatter(3, 4), false);
    IStreamFormatter pan_seq = new VfStreamFormatterFieldVarHex("PAN sequence number", Validator.getHex(), new VfLengthFormatter(3, 3), false);
    IStreamFormatter auth_status = new StreamFormatterFieldFixed("Authentication status", Validator.getN(), 1);
    StreamFormatterContainer c01_rsp = new StreamFormatterContainer();
    c01_rsp.add(rsp_code);
    c01_rsp.add(aid);
    c01_rsp.add(pref_name);
    c01_rsp.add(app_label);
    c01_rsp.add(service_code);
    c01_rsp.add(cardholder_name);
    c01_rsp.add(track2_equiv);
    c01_rsp.add(pan);
    c01_rsp.add(expiry_date);
    c01_rsp.add(pan_seq);
    c01_rsp.add(auth_status);
    IStreamFormatter c01_peek = new StreamFormatterPeek(0, "00", null, c01_rsp, no_rsp, "PAN", c01_rsp, no_rsp);
    pkt_c01.add(c01_peek);
    StreamFormatterContainer pkt_c02 = new StreamFormatterContainer();
    IStreamFormatter sign = new StreamFormatterFieldFixed("Sign", Validator.getN(), 1);
    IStreamFormatter tvr = new VfStreamFormatterFieldVarHex("TVR", Validator.getHex(), new VfLengthFormatter(3, 5), false);
    IStreamFormatter tsi = new VfStreamFormatterFieldVarHex("TSI", Validator.getHex(), new VfLengthFormatter(3, 16), false);
    StreamFormatterContainer c02_rsp = new StreamFormatterContainer();
    c02_rsp.add(rsp_code);
    c02_rsp.add(sign);
    c02_rsp.add(tvr);
    c02_rsp.add(tsi);
    IStreamFormatter c02_peek = new StreamFormatterPeek(0, "00", null, c02_rsp, no_rsp, "TVR", c02_rsp, no_rsp);
    pkt_c02.add(c02_peek);
    StreamFormatterContainer pkt_c03 = new StreamFormatterContainer();
    IStreamFormatter cid = new VfStreamFormatterFieldVarHex("Cryptogram information data", Validator.getHex(), new VfLengthFormatter(3, 1), false);
    IStreamFormatter auth_rsp = new VfStreamFormatterFieldVarHex("Authorisation response", Validator.getHex(), new VfLengthFormatter(3, 2), false);
    StreamFormatterContainer c03_rsp = new StreamFormatterContainer();
    c03_rsp.add(rsp_code);
    c03_rsp.add(cid);
    c03_rsp.add(auth_rsp);
    IStreamFormatter c03_peek = new StreamFormatterPeek(0, "00", null, c03_rsp, no_rsp, "Cryptogram information data", c03_rsp, no_rsp);
    pkt_c03.add(c03_peek);
    StreamFormatterContainer pkt_c04 = new StreamFormatterContainer();
    IStreamFormatter num_scripts = new StreamFormatterFieldFixed("Number of scripts", Validator.getN(), 2);
    IStreamFormatter script_result = new StreamFormatterFieldFixed("Script result", Validator.getAn(), 10);
    IStreamFormatter script_results = new StreamFormatterRepeat("Script results", 5, script_result);
    StreamFormatterContainer c04_rsp = new StreamFormatterContainer();
    c04_rsp.add(rsp_code);
    c04_rsp.add(cid);
    c04_rsp.add(auth_rsp);
    c04_rsp.add(num_scripts);
    c04_rsp.add(script_results);
    IStreamFormatter c04_peek = new StreamFormatterPeek(0, "00", null, c04_rsp, no_rsp, "Cryptogram information data", c04_rsp, no_rsp);
    pkt_c04.add(c04_peek);
    StreamFormatterContainer pkt_c11 = new StreamFormatterContainer();
    pkt_c11.add(rsp_code);
    StreamFormatterContainer pkt_c19 = new StreamFormatterContainer();
    pkt_c19.add(rsp_code);
    StreamFormatterContainer pkt_c20 = new StreamFormatterContainer();
    IStreamFormatter value = new VfStreamFormatterFieldVarHex("Value", Validator.getHex(), new VfLengthFormatter(3, 999), false);
    StreamFormatterContainer value_container = new StreamFormatterContainer();
    value_container.add(value);
    StreamFormatterRepeat values = new StreamFormatterRepeat("Values", 10, value_container);
    StreamFormatterContainer c20_rsp = new StreamFormatterContainer();
    pkt_c20.add(rsp_code);
    pkt_c20.add(values);
    StreamFormatterContainer pkt_c22 = new StreamFormatterContainer();
    pkt_c22.add(rsp_code);
    StreamFormatterContainer pkt_c23 = new StreamFormatterContainer();
    pkt_c23.add(rsp_code);
    StreamFormatterContainer pkt_c24 = new StreamFormatterContainer();
    StreamFormatterContainer c24_rsp = new StreamFormatterContainer();
    c24_rsp.add(rsp_code);
    c24_rsp.add(cid);
    c24_rsp.add(auth_rsp);
    IStreamFormatter c24_peek = new StreamFormatterPeek(0, "00", null, c24_rsp, no_rsp, "Cryptogram information data", c24_rsp, no_rsp);
    pkt_c24.add(c24_peek);
    StreamFormatterContainer pkt_c25 = new StreamFormatterContainer();
    pkt_c25.add(rsp_code);
    StreamFormatterContainer pkt_c26 = new StreamFormatterContainer();
    IStreamFormatter key_press = new StreamFormatterFieldFixed("Key pressed", Validator.getAn(), 2);
    StreamFormatterContainer c26_rsp = new StreamFormatterContainer();
    c26_rsp.add(rsp_code);
    c26_rsp.add(key_press);
    IStreamFormatter c26_peek = new StreamFormatterPeek(0, "00", null, c26_rsp, no_rsp, "Key pressed", c26_rsp, no_rsp);
    pkt_c26.add(c26_peek);
    StreamFormatterContainer pkt_i02 = new StreamFormatterContainer();
    IStreamFormatter operation_status = new StreamFormatterFieldFixed("Operation Status", Validator.getN(), 1);
    pkt_i02.add(operation_status);
    StreamFormatterContainer pkt_i05 = new StreamFormatterContainer();
    IStreamFormatter presence_result = new StreamFormatterFieldFixed("ICC Presence", Validator.getN(), 1);
    pkt_i05.add(presence_result);
    StreamFormatterContainer pkt_d03 = new StreamFormatterContainer();
    pkt_d03.add(new StreamFormatterFieldFixed("Response code", Validator.getN(), 2));
    pkt_d03.add(new StreamFormatterFieldFixed("number of fields", Validator.getN(), 3));
    pkt_d03.add(new StreamFormatterFieldFixed("length", Validator.getN(), 3));
    pkt_d03.add(new StreamFormatterFieldVar("fields", Validator.getAns(), 497, true));
    StreamFormatterContainer pkt_d04 = new StreamFormatterContainer();
    pkt_d04.add(new StreamFormatterFieldFixed("Response code", Validator.getN(), 2));
    pkt_d04.add(new StreamFormatterFieldFixed("record number", Validator.getN(), 3));
    StreamFormatterContainer pkt_d05 = new StreamFormatterContainer();
    pkt_d05.add(new StreamFormatterFieldFixed("Response code", Validator.getN(), 2));
    StreamFormatterContainer pkt_d06 = new StreamFormatterContainer();
    pkt_d06.add(new StreamFormatterFieldFixed("Response code", Validator.getN(), 2));
    Hashtable pkt_3_ht = new Hashtable();
    pkt_3_ht.put("C00", pkt_c00);
    pkt_3_ht.put("C01", pkt_c01);
    pkt_3_ht.put("C02", pkt_c02);
    pkt_3_ht.put("C03", pkt_c03);
    pkt_3_ht.put("C04", pkt_c04);
    pkt_3_ht.put("C11", pkt_c11);
    pkt_3_ht.put("C19", pkt_c19);
    pkt_3_ht.put("C20", pkt_c20);
    pkt_3_ht.put("C22", pkt_c22);
    pkt_3_ht.put("C23", pkt_c23);
    pkt_3_ht.put("C24", pkt_c24);
    pkt_3_ht.put("C25", pkt_c25);
    pkt_3_ht.put("C26", pkt_c26);
    pkt_3_ht.put("I02", pkt_i02);
    pkt_3_ht.put("I05", pkt_i05);
    pkt_3_ht.put("D03", pkt_d03);
    pkt_3_ht.put("D04", pkt_d04);
    pkt_3_ht.put("D06", pkt_d06);
    IStreamFormatter msg_pkt_3_select = new StreamFormatterCase("Packet Type 3-byte", pkt_3_ht, null);
    StreamFormatterContainer msg_3_byte = new StreamFormatterContainer();
    msg_3_byte.add(packet_type_3_byte);
    msg_3_byte.add(msg_pkt_3_select);
    IStreamFormatter c_msg_select = new StreamFormatterPeek(0, "C", null, msg_3_byte, msg_2_byte, "Packet Type 3-byte", msg_3_byte, msg_2_byte);
    IStreamFormatter i_msg_select = new StreamFormatterPeek(0, "I", null, msg_3_byte, c_msg_select, "Packet Type 3-byte", msg_3_byte, c_msg_select);
    IStreamFormatter d_msg_select = new StreamFormatterPeek(0, "D", null, msg_3_byte, i_msg_select, "Packet Type 3-byte", msg_3_byte, i_msg_select);
    msg.add(d_msg_select);
    stream = msg;
    pkt_rsp_code_ht = new Hashtable();
    pkt_rsp_code_ht.put("00", "OPERATION SUCCESSFUL");
    pkt_rsp_code_ht.put("01", "INVALID COMMAND CODE");
    pkt_rsp_code_ht.put("02", "INVALID DATA FORMAT");
    pkt_rsp_code_ht.put("03", "RESPONSE HAS MORE PACKETS");
    pkt_rsp_code_ht.put("04", "PREVIOUS STEP MISSING");
    pkt_rsp_code_ht.put("05", "INVALID_CONFIG");
    pkt_rsp_code_ht.put("06", "TIMEOUT");
    pkt_rsp_code_ht.put("07", "TIMER_ERROR");
    pkt_rsp_code_ht.put("08", "CANCELLED");
    pkt_rsp_code_ht.put("09", "COMM_FAILURE");
    pkt_rsp_code_ht.put("10", "CHIP_RDR_FAILURE");
    pkt_rsp_code_ht.put("20", "USE_CHIP_READER");
    pkt_rsp_code_ht.put("21", "USE_MAG_STRIPE");
    pkt_rsp_code_ht.put("22", "CHIP_ERROR");
    pkt_rsp_code_ht.put("23", "CARD_REMOVED");
    pkt_rsp_code_ht.put("24", "CARD_BLOCKED");
    pkt_rsp_code_ht.put("25", "CARD_NOT_SUPPORTED");
    pkt_rsp_code_ht.put("26", "INVALID_APP");
    pkt_rsp_code_ht.put("27", "DO_ABSENT");
    pkt_rsp_code_ht.put("28", "DO_REPEAT");
    pkt_rsp_code_ht.put("29", "INVALID_PIN");
    pkt_rsp_code_ht.put("30", "PIN_LAST_CHANCE");
    pkt_rsp_code_ht.put("31", "PIN_RETRYLIMIT");
    pkt_rsp_code_ht.put("32", "TLVCOLLECTION_FULL");
    pkt_rsp_code_ht.put("33", "TLVFORMAT");
    pkt_rsp_code_ht.put("34", "INVALID_PDOL");
    pkt_rsp_code_ht.put("35", "INVALID_CDOL");
    pkt_rsp_code_ht.put("36", "INVALID_TDOL");
    pkt_rsp_code_ht.put("37", "INVALID_DDOL");
    pkt_rsp_code_ht.put("38", "INVALID_SDOL");
    pkt_rsp_code_ht.put("39", "AID_LIST_FULL");
    pkt_rsp_code_ht.put("40", "PSE_NOT_FOUND");
    pkt_rsp_code_ht.put("41", "ICC_DATA_MISSING");
    pkt_rsp_code_ht.put("42", "CANDIDATELIST_EMPTY");
    pkt_rsp_code_ht.put("43", "APDU_FORMAT");
    pkt_rsp_code_ht.put("44", "HASH_FAILED");
    pkt_rsp_code_ht.put("45", "BAD_TRACK2");
    pkt_rsp_code_ht.put("46", "CERTIFICATE_EXPIRED");
    pkt_rsp_code_ht.put("47", "DIFF_AVN_ERR");
    pkt_rsp_code_ht.put("48", "SERVICE_NOT_ALLOWED");
    pkt_rsp_code_ht.put("49", "APP_NOTYET_EFFECTIVE");
    pkt_rsp_code_ht.put("50", "APP_EXPIRED");
    pkt_rsp_code_ht.put("51", "LOWER_LMT_EXCEED");
    pkt_rsp_code_ht.put("52", "UPPER_LMT_EXCEED");
    pkt_rsp_code_ht.put("53", "CVM_FAILED");
    pkt_rsp_code_ht.put("54", "UNRECOGNIZED_CVM");
    pkt_rsp_code_ht.put("55", "BAD_DATA_FORMAT");
    pkt_rsp_code_ht.put("56", "BAD_HASHALGO");
    pkt_rsp_code_ht.put("57", "BAD_IPKALGO");
    pkt_rsp_code_ht.put("58", "INVALID_LENGTH");
    pkt_rsp_code_ht.put("59", "TAG_NOTFOUND");
    pkt_rsp_code_ht.put("60", "INVALID_OFFSET");
    pkt_rsp_code_ht.put("61", "BAD_COMMAND");
    pkt_rsp_code_ht.put("62", "TAG_ALREADY_PRESENT");
    pkt_rsp_code_ht.put("63", "READ_RECORD_FAILED");
    pkt_rsp_code_ht.put("64", "EXPLICIT_SELEC_REQD");
    pkt_rsp_code_ht.put("65", "COND_NOT_SATISFIED");
    pkt_rsp_code_ht.put("66", "CSN_FAILURE");
    pkt_rsp_code_ht.put("67", "BAD_SLOT");
    pkt_rsp_code_ht.put("68", "BAD_LEN");
    pkt_rsp_code_ht.put("69", "NO_MEM");
    pkt_rsp_code_ht.put("70", "CAPK_ERROR");
    pkt_rsp_code_ht.put("71", "PIN_CONFIG_ERR");
    pkt_rsp_code_ht.put("72", "EST_TAB_ERR");
    pkt_rsp_code_ht.put("73", "MVT_TAB_ERR");
    pkt_rsp_code_ht.put("74", "SCRIPT_ERROR");
    pkt_rsp_code_ht.put("75", "LOG_ERROR");
    pkt_rsp_code_ht.put("76", "COMBINED_DDA_AC_GEN_REQD");
    pkt_rsp_code_ht.put("77", "COMBINED_DDA_AC_GEN_FAILED");
    pkt_rsp_code_ht.put("78", "CARD_INSERTED");
    pkt_rsp_code_ht.put("97", "UNRECOG_RETURN");
    pkt_rsp_code_ht.put("98", "UNEXPECTED_RETURN");
    pkt_rsp_code_ht.put("99", "FAIL");
}
}

Если вы видите статический блок класса драйвера, там есть объект с именем pkt_3_ht, мне нужно поместить еще одно поле в этот объект, и я должен добавить еще несколько объектов к этому статическому блоку..

пожалуйста, предложите мне способ обойти этот статический блок, не касаясь этого класса драйверов. Я попытался расширить свой класс с помощью класса драйвера и добавил статический блок в свой класс с дополнительными объектами, которые мне нужны, но статический блок моего класса никогда не вызывается.

буду благодарен.


person Talib    schedule 26.05.2016    source источник
comment
Ничто статичное не может быть переопределено в Java. Неясно, что вы спрашиваете, или проблема XY.   -  person user207421    schedule 26.05.2016
comment
статический блок класса запускается, когда класс инициализируется в jvm, теперь в этом классе я хочу добавить еще несколько вещей в статический блок, но не хочу менять код класса. Я хочу сделать это через наследование или каким-либо другим способом. потому что это класс драйвера, и я не хочу его трогать, просто хочу добавить еще несколько функций... @EJP   -  person Talib    schedule 26.05.2016
comment
@EJP Я пробовал наследовать этот класс с моим классом и определил статический блок в моем унаследованном классе, но это не сработало, статический блок моего расширенного класса никогда не вызывался.   -  person Talib    schedule 26.05.2016
comment
@Talib Как вы сами сказали, блок статического инициализатора выполняется, когда загрузчик класса загружает этот класс. Вы создали экземпляр своего класса (потому что именно это вызывает загрузку класса)? Кстати, даже если вы это сделаете, статический инициализатор из суперкласса не будет переопределен, это будет просто еще один блок статического инициализатора, который будет выполняться после блока из суперкласса.   -  person Jaroslaw Pawlak    schedule 26.05.2016
comment
@JaroslawPawlak, так что нет способа добиться этого? или любая работа вокруг этого?   -  person Talib    schedule 26.05.2016
comment
Изменение статического инициализатора - невозможно (альтернативы см. в ответе @ipsi). Достижение вашей цели — зависит от того, какие поля выставляет драйвер, потому что это единственное, что вы можете использовать. Вообще, если класс не предназначен для наследования, то изменить что-то там будет очень сложно.   -  person Jaroslaw Pawlak    schedule 26.05.2016


Ответы (1)


Невероятно сложно. Вы не можете переопределить статический инициализатор с помощью подкласса, поэтому ваши варианты:

  1. Скопируйте/вставьте код в новый класс, которым вы полностью управляете.
  2. Используйте библиотеку, например Javassist, чтобы переписать байт-код класса при компиляции или запуске. -время. Поскольку это статический инициализатор, вам, вероятно, придется переписать байтовый код при загрузке класса, что еще менее интересно.

См. также этот вопрос о поведении статических инициализаторов: Поведение статических блоков с наследованием

person ipsi    schedule 26.05.2016
comment
Я никогда не переписывал байт-код, можете ли вы дать мне какой-нибудь образец, который подходит для моего сценария? - person Talib; 26.05.2016
comment
Я также не использовал Javassist напрямую - вы, вероятно, захотите начать с веб-сайта и задать другой вопрос, если вы хотите идти по этому пути. Я действительно не рекомендовал бы это, если только нет большого количества классов, которые вам нужно изменить - достаточно, чтобы поддерживать их вручную было бы слишком болезненно. - person ipsi; 26.05.2016