如何正确映射泛型

时间:2014-03-02 22:20:20

标签: java generics

我正在尝试将一组编码器映射到它们的相关输入/输出对象。我需要帮助,因为我无法弄明白。

这是一个在对象及其编码器之间应用映射的抽象。

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);
    }

}

我理解我在做一些概念错误的事情,所以如果有人可以解释我究竟是什么,我无法理解。这将非常有帮助。

0 个答案:

没有答案
相关问题