Хорошо, поэтому я пытаюсь выполнить обработку сетевых пакетов в Java с использованием классов. Для чтения данных из моего потока я использую DataInputStream. Моя ветка чтения для моего сервера выглядит так:
public void run()
{
while(client.isActive())
{
try{
handle(is.readShort());
}catch (IOException e){
client.stop(e);
break;
}
}
}
Теперь у меня есть дескриптор метода:
public void handle(short id) throws IOException
{
InPacket packet = null;
try {
packet = ClassUtils.newInstance(InPacket.class, "server.client.InPacket"+id);
}catch (Exception e){
e.printStackTrace();
}
if (packet!=null){
packet.handle(this);
}
else{
throw new IOException("Invalid packet");
}
}
Я пытаюсь создать новый класс, используя
packet = ClassUtils.newInstance(InPacket.class, "server.client.InPacket"+id);
линия.
В ClassUtils это та функция:
public static <T> T newInstance(Class<? extends T> type, String className) throws
ClassNotFoundException,
InstantiationException,
IllegalAccessException {
Class<?> clazz = Class.forName(className);
Class<? extends T> targetClass = clazz.asSubclass(type);
T result = targetClass.newInstance();
return result;
}
Моя проблема : когда я пытаюсь получить этот класс только с частью имени (я пытаюсь получить его с помощью «InPacket1», в то время как класс называется «InPacket1Connect»), он может ' не могу найти это. Возможно ли это сделать на Java, и если да, то как? Если нет, какой метод вы рекомендуете для обработки моих сетевых пакетов?