好的,所以我正在嘗試使用類在Java中執行我的網絡數據包處理。爲了從我的流中讀取數據,我使用了一個DataInputStream。我對我的服務器讀線程看起來是這樣的:按照Java中的部分名稱獲取類
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中做到這一點,如果是的話如何?如果沒有,您建議如何處理我的網絡數據包?
你能解釋一下爲什麼你需要爲此使用'newInstance()'嗎? – Jivings 2012-03-01 09:10:30
我需要創建一個Packet類的實例,然後處理該實例,因爲我想在每個數據包的不同類中處理我的網絡。 – Gmfreaky 2012-03-01 09:28:19