实现hashCode和equals方法,但类是最终的

时间:2019-05-05 20:43:27

标签: java azureservicebus

有一个类Message,它没有hashCodeequals的实现。因此,我想要进行扩展,并实现自己的hashCodeequals方法。唉!本课程为期末考试。是否可以使用一种技术/技巧/解决方法?

我想避免将重复项添加到Set中。这就是原因。

1 个答案:

答案 0 :(得分:3)

在无法扩展基类的情况下,另一种技术是制作包装器类,并将所有方法委托给基类。在这种情况下,这很好用,因为基类正在实现基本接口:

import java.time.Duration;
import java.time.Instant;
import java.util.Map;
import java.util.UUID;

public class WrappedMessage implements IMessage {
    private final IMessage message;

    public WrappedMessage(IMessage message) {
        this.message = message;
    }

    @Override
    public int hashCode() { // TODO add your own implementation
        return 4; // chosen by fair dice roll.
                  // guaranteed to be random.
    }

    @Override
    public boolean equals(Object obj) { // TODO add your own implementation
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        return true;
    }

    // Delegate all other methods:

    @Override
    public IMessage createCopy() {
        // this method is special as it returns an IMessage,
        // make sure to give back our wrapper instead
        return new WrappedMessage(message.createCopy());
    }

    @Override
    public byte[] getBody() {
        return message.getBody();
    }

    @Override
    public void setBody(byte[] body) {
        message.setBody(body);
    }

    @Override
    public String getContentType() {
        return message.getContentType();
    }

    @Override
    public void setContentType(String contentType) {
        message.setContentType(contentType);
    }

    @Override
    public String getCorrelationId() {
        return message.getCorrelationId();
    }

    @Override
    public void setCorrelationId(String correlationId) {
        message.setCorrelationId(correlationId);
    }

    @Override
    public String getDeadLetterSource() {
        return message.getDeadLetterSource();
    }

    @Override
    public long getDeliveryCount() {
        return message.getDeliveryCount();
    }

    @Override
    public Instant getEnqueuedTimeUtc() {
        return message.getEnqueuedTimeUtc();
    }

    @Override
    public Instant getExpiresAtUtc() {
        return message.getExpiresAtUtc();
    }

    @Override
    public String getLabel() {
        return message.getLabel();
    }

    @Override
    public void setLabel(String label) {
        message.setLabel(label);
    }

    @Override
    public UUID getLockToken() {
        return message.getLockToken();
    }

    @Override
    public Instant getLockedUntilUtc() {
        return message.getLockedUntilUtc();
    }

    @Override
    public void setLockedUntilUtc(Instant lockedUntilUtc) {
        message.setLockedUntilUtc(lockedUntilUtc);
    }

    @Override
    public MessageBody getMessageBody() {
        return message.getMessageBody();
    }

    @Override
    public void setMessageBody(MessageBody body) {
        message.setMessageBody(body);
    }

    @Override
    public String getMessageId() {
        return message.getMessageId();
    }

    @Override
    public void setMessageId(String messageId) {
        message.setMessageId(messageId);
    }

    @Override
    public String getPartitionKey() {
        return message.getPartitionKey();
    }

    @Override
    public void setPartitionKey(String partitionKey) {
        message.setPartitionKey(partitionKey);
    }

    @Override
    public Map<String, Object> getProperties() {
        return message.getProperties();
    }

    @Override
    public void setProperties(Map<String, Object> properties) {
        message.setProperties(properties);
    }

    @Override
    public String getReplyTo() {
        return message.getReplyTo();
    }

    @Override
    public void setReplyTo(String replyTo) {
        message.setReplyTo(replyTo);
    }

    @Override
    public String getReplyToSessionId() {
        return message.getReplyToSessionId();
    }

    @Override
    public void setReplyToSessionId(String replyToSessionId) {
        message.setReplyToSessionId(replyToSessionId);
    }

    @Override
    public Instant getScheduledEnqueueTimeUtc() {
        return message.getScheduledEnqueueTimeUtc();
    }

    @Override
    public void setScheduledEnqueueTimeUtc(Instant scheduledEnqueueTimeUtc) {
        message.setScheduledEnqueueTimeUtc(scheduledEnqueueTimeUtc);
    }

    @Override
    public Instant getScheduledEnqueuedTimeUtc() {
        return message.getScheduledEnqueuedTimeUtc();
    }

    @Override
    public void setScheduledEnqueuedTimeUtc(Instant scheduledEnqueueTimeUtc) {
        message.setScheduledEnqueuedTimeUtc(scheduledEnqueueTimeUtc);
    }

    @Override
    public long getSequenceNumber() {
        return message.getSequenceNumber();
    }

    @Override
    public String getSessionId() {
        return message.getSessionId();
    }

    @Override
    public void setSessionId(String sessionId) {
        message.setSessionId(sessionId);
    }

    @Override
    public Duration getTimeToLive() {
        return message.getTimeToLive();
    }

    @Override
    public void setTimeToLive(Duration timeToLive) {
        message.setTimeToLive(timeToLive);
    }

    @Override
    public String getTo() {
        return message.getTo();
    }

    @Override
    public void setTo(String to) {
        message.setTo(to);
    }

    @Override
    public String getViaPartitionKey() {
        return message.getViaPartitionKey();
    }

    @Override
    public void setViaPartitionKey(String partitionKey) {
        message.setViaPartitionKey(partitionKey);
    }
}