我正在尝试设计接口和类来解析 pcap 格式文件中的某些类型的数据包。(我知道存在特殊的库,但我需要自己做)
所以我有一个分类器接口,该方法会检查它是否是一个有效的数据包。
public interface Classifier {
boolean classify (PcapPacket pcapPacket);
}
解析器接口的方法会将内部的字节数组PcapPacket
转换为一些字段。P
代表新解析的数据包和S
统计信息。
public interface Parser<P, S> extends Classifier {
P parsePacket (PcapPacket pcapPacket);
P parsePacket (PcapPacket pcapPacket, P outPacket);
S parseReader (PcapReader pcapReader);
}
现在我已经实现AParser
了它可以解析某个数据包或文件。
public class AParser implements Parser<APacket, AStats>, Classifier {
但是现在我很难BParser
在AParser
考虑到这一点的基础上实施BPacket extends APacket
。
public class BParser extends AParser implements Parser<BPacket, BStats> {
在parsePacket
我想做这样的事情:
BPacket parsePacket (PcapPacket pcapPacket) {
APacket apacket = super.parse(pcapPacket);
BPacket bpacket = new BPacket(apacket);
//extract val1 and val2 from pcapPacket
bpacket.set(val1, val2);
return bpacket;
}
粗体线给出编译错误。在这一点上,我明白我的方法有问题。可能,我在定义接口时需要使用泛型。
您将如何帮助我重新设计此代码以使其在未来工作和灵活?