Java – two related enumeration mappings?

I have two related enumerations

Enum1:

public enum HttpMethodName 
{
    GET,POST,PUT,DELETE; 
}

Enum2:

public enum ProtocolOperation {
    CREATE(1),RETRIEVE(2),UPDATE(3),DELETE(4),NOTIFY(5);


    private BigInteger operationId;

    public BigInteger getOperationId() {
        return operationId;
    }

    private ProtocolOperation(int operationId) {
        this.operationId = BigInteger.valueOf(operationId);
    }
}

The mapping of enumeration values is:

Create--> POST
Retrieve--> GET
Update--> PUT
Delete--> DELETE
Notify---> POST

Therefore, there is a one-to-one mapping between values. In addition to post events, it can create or notify two values according to conditions

I'm considering keeping the mapping as a list:

public enum HttpMethodName 
    {

        POST(new List(ProtocolOperation.CREATE,ProtocolOperation.NOTIFY)),GET ( new List(ProtocolOperation.RETRIEVE) ),PUT (new List(ProtocolOperation.UPDATE),DELETE(new List(ProtocolOperation.DELETE) ;

        List<ProtocolOperation > ops;
        HttpMethodName (List<ProtocolOperation> ops)
        {
            this.ops = ops;
        }
    }

Is there a better way

Edit:

I will map two methods of protocoloperation from httpmethodname < ---- >

Solution

Why do you find the current method unsatisfactory?

Without your knowledge, I can only suggest deleting the template:

import static ProtocolOperation.*;

public enum HttpMethodName {
    GET(RETRIEVE),POST(CREATE,NOTIFY),PUT(UPDATE),DELETE(ProtocolOperation.DELETE);

    final List<ProtocolOperation> ops;

    HttpMethodName(ProtocolOperation... ops) {
        this.ops = Collections.unmodifiableList(Arrays.asList(ops));
    }
}

UPD:

If you want to map in two ways, it makes sense to first map the protocol operation to httpmethodname (because no list is required) and create a simple search method in mttpmethodname:

public enum ProtocolOperation {
    CREATE(1,HttpMethodName.POST),RETRIEVE(2,HttpMethodName.GET),UPDATE(3,HttpMethodName.PUT),DELETE(4,HttpMethodName.DELETE),NOTIFY(5,HttpMethodName.POST);

    private BigInteger operationId;
    private HttpMethodName methodName;

    public BigInteger getOperationId() {
        return operationId;
    }

    public HttpMethodName getmethodName() {
        return methodName;
    }

    private ProtocolOperation(int operationId,HttpMethodName httpMethodName) {
        this.methodName = httpMethodName;
        this.operationId = BigInteger.valueOf(operationId);
    }
}

public enum HttpMethodName {
    GET,DELETE;

    List<ProtocolOperation> getProtocolOperations() {
        List<ProtocolOperation> ops = new ArrayList<ProtocolOperation>(2);
        for (ProtocolOperation op : ProtocolOperation.values()) {
            if (op.getmethodName() == this) {
                ops.add(op);
            }
        }
        return ops;
    }
}

Because you have constants and a small number of values, you do not need to create a final static mapping in httpmethodname to provide backward mapping. Linear search is fast enough for your situation

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>