さて、クラスを使用してJavaでネットワークパケット処理をしようとしています。私のストリームからデータを読み込むために、私はDataInputStreamを使用します。私はJavaの名前の一部でクラスを取得
packet = ClassUtils.newInstance(InPacket.class, "server.client.InPacket"+id);
ラインを使用して新しいクラスをインスタンス化しようと
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");
}
}
:
public void run()
{
while(client.isActive())
{
try{
handle(is.readShort());
}catch (IOException e){
client.stop(e);
break;
}
}
}
は、今私はメソッドハンドルを持っている:私のサーバーのための私の読書スレッドは、次のようになります。 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
パケットごとに別々のクラスでネットワークを扱いたいので、Packetクラスのインスタンスを作成してそのインスタンスを処理する必要があります。 – Gmfreaky