我正在尝试将一组编码器映射到它们的相关输入/输出对象。我需要帮助,因为我无法弄明白。
这是一个在对象及其编码器之间应用映射的抽象。
public abstract class EncodingRule<T, V> {
@Getter private final Map<T, V> mappings = new HashMap<>();
public void addMapping(T type, V value) {
mappings.put(type, value);
}
}
这是一个具体的类,我在其中应用必要的规范。正如您所看到的,我的BerIntegerEncoder无法添加到映射中,因为它与泛型类型冲突。
public class Asn1EncodingRule<T extends Asn1TypeEncoder<?>> extends EncodingRule<Asn1, T> {
{
// T cannot be applied to BerIntegerEncoder
addMapping(INTEGER, new BerIntegerEncoder());
}
}
有问题的编码器。
public class BerIntegerEncoder implements Asn1TypeEncoder<Asn1Integer> {
@Override
public Asn1Integer decode(ByteBuf buf) {
// not yet implemented
return null;
}
}
访问编码器时,它返回一个Object而不是Asn1Integer。
public class SnmpMessageDecoder extends MessageToMessageDecoder<DatagramPacket> {
@Autowired
@Getter @Setter
private Asn1EncoderContext asn1;
@Override
protected void decode(ChannelHandlerContext ctx, DatagramPacket msg, List<Object> out) throws Exception {
// returns type object
Asn1Integer version = asn1.getEncoderForType(Asn1.INTEGER).decode(payload);
}
}
我理解我在做一些概念错误的事情,所以如果有人可以解释我究竟是什么,我无法理解。这将非常有帮助。