0

私の情報源:

private static HashMap<String, Class<?>> mapLogic = new HashMap<String,Class<?>>();

mapLogic.put("s", Packet1.class);
mapLogic.put("a", Packet2.class);

public abstract class Packet { 
    public abstract void get(ChannelBuffer buffer);
    public abstract void send(ChannelBuffer buffer);
}

public class Packet1 extends Packet{

    @Override
    public void get(ChannelBuffer buffer) {
    }


    @Override
    public void send(ChannelBuffer buffer) {
    }

}


public class Packet2 extends Packet{

    @Override
    public void get(ChannelBuffer buffer) {
    }

    @Override
    public void send(ChannelBuffer buffer) {
    }

}

mapLogic.get("s").newInstance().get() <--- get または send は利用できません

これらのメソッドを取得するにはどうすればよいですか?

4

1 に答える 1

3

これを変える:

private static HashMap<String, Class<?>> mapLogic = new HashMap<String,Class<?>>();

これに:

private static HashMap<String, Class<? extends Packet>> mapLogic =
    new HashMap<String, Class<? extends Packet>>();

mapLogic.get("s")が typeClass<? extends Packet>になり、式mapLogic.get("s").newInstance()が typeになるようにしPacketます。

今のやり方では、式mapLogic.get("s")には typeClass<?>があり、式mapLogic.get("s").newInstance()には type がありObjectます。コンパイラは、実際のインスタンスが実行時型Packet1またはを持っていることを伝える方法がないため、およびメソッドが想定されてPacket2いるものを知りません。getsend

于 2013-03-16T22:51:46.120 に答える