동적 클래스 로딩
Class<? extends Object> myClass = Class.forName("com.korail.Decoder."+ clsName);
tlvClass = myClass.newInstance().getClass();
생성자가 존재하는 클래스 동적 로딩& 필드 &메소드 사용
// 생성자 존재시 동적클래스 로딩
Class<? extends Object> myClass2 = Class.forName("com.korail.Decoder."+ entryClassName);
Class paramTypes[] = new Class[1];
paramTypes[0] = Map.class;
Constructor ct = myClass2.getConstructor(paramTypes);
Object arglist[] = new Object[1];
arglist[0] = decoder102Master;
Object tlvEntryObj = ct.newInstance(arglist);
Field[] fields = tlvEntryObj.getClass().getFields();
Class entryClass = tlvEntryObj.getClass();
// Return Type ==> Bytes 일 경우.
if(entryClass.getField("token_size_type").getChar(tlvEntryObj) == 'B') {
entryClass.getField("size").set(tlvEntryObj, entryClass.getField("token_size").get(tlvEntryObj)); //tlvEntryObj.size = tlvEntryObj.token_size;
entryClass.getField("mask").set(tlvEntryObj, 0); //tlvEntryObj.mask = 0;
pos_byte += entryClass.getField("size").getInt(tlvEntryObj); //pos_byte += tlvEntryObj.size;
pos_bit = 0;
}
// Return Type ==> Bit 일 경우.
else
{
entryClass.getField("start_bit").set(tlvEntryObj, pos_bit); //tlvEntryObj.start_bit = pos_bit;
entryClass.getField("size").set(tlvEntryObj, pos_bit + entryClass.getField("token_size").getInt(tlvEntryObj)); //tlvEntryObj.size = (pos_bit + tlvEntryObj.token_size) / 8; // 0이 될수도 있음..
pos_byte += entryClass.getField("size").getInt(tlvEntryObj); //pos_byte += tlvEntryObj.size;
pos_bit = (pos_bit + entryClass.getField("token_size").getInt(tlvEntryObj)) % 8;//pos_bit = (pos_bit + tlvEntryObj.token_size) % 8;
}
Class methodParamTypes[] = new Class[1];
methodParamTypes[0] = tlvEntryObj.getClass();
Method[] methods = tlvClass.getDeclaredMethods();
tlvClass.getMethod("add", methodParamTypes); // tlvObj.add(tlvEntryObj);
"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기, 각종 광고, 영업, 판매, 제안서, 전단지 반응율 3배×10배 이상 높이는 마법의 8단계 공식" |
☞자세히보기 |
|
|