在java中使用ENUm进行不兼容的Map Entry

时间:2016-03-22 06:55:29

标签: java dictionary enums

为什么我得到"The return type is incompatible with Map.Entry<SEND,CANDataSendInfo>.getKey()"

这里我试图创建一个对象,其中包含enum作为键,Class对象作为Value,但我在第 public SEND getKey()

行遇到问题
package cantestbus;

import java.util.Map;

public class SendKV<SEND , CANDataSendInfo> implements Map.Entry<SEND , CANDataSendInfo>
{   
    enum SEND 
    { 
        SEND_0x41, SEND_0x42, SEND_0x43, SEND_0x44, SEND_0x61, SEND_0x62, SEND_0x63, SEND_0x64 
    }  

    private SEND key;
    private CANDataSendInfo value;

    public SendKV(SEND key, CANDataSendInfo value)
    {
        this.key = key;
        this.value = value;
    }

    public SEND setKey(SEND key)
    {
        return this.key = key;
    }

    public SEND getKey()
    {
        return this.key;
    }

    public CANDataSendInfo setValue(CANDataSendInfo value)
    {
        return this.value = value;
    }

    public CANDataSendInfo getValue()
    {
        return this.value;
    }

}

1 个答案:

答案 0 :(得分:2)

这是问题所在:

public class SendKV<SEND , CANDataSendInfo> implements Map.Entry<SEND , CANDataSendInfo>

您声明了一个名为SENDCANDataSendInfo的类型参数的泛型类。您不希望这是通用的 - 您希望SEND表示现有类型SEND等。只需将您的声明更改为:

public class SendKV implements Map.Entry<SEND, CANDataSendInfo>

(作为旁注,一个地图条目是可变的,当然在密钥中是很奇怪的。除非你有一个非常好的理由,我会敦促你在构造函数中取出键和值,使变量最终,并删除setter。我也会使类最终。)