001package co.codewizards.cloudstore.core.util;
002
003import java.util.Map;
004
005public class Pair<K, V> implements Map.Entry<K, V> {
006        
007        private final K key;
008        
009        private final V value;
010        
011        public Pair(K key, V value) {
012                this.key = key;
013                this.value = value;
014        }
015
016        @Override
017        public K getKey() {
018                return key;
019        }
020
021        @Override
022        public V getValue() {
023                return value;
024        }
025
026        @Override
027        public V setValue(V value) {
028                throw new UnsupportedOperationException("Pair is read-only!");
029        }
030
031        @Override
032        public int hashCode() {
033                final int prime = 31;
034                int result = 1;
035                result = prime * result + ((key == null) ? 0 : key.hashCode());
036                result = prime * result + ((value == null) ? 0 : value.hashCode());
037                return result;
038        }
039
040        @Override
041        public boolean equals(final Object obj) {
042                if (this == obj)
043                        return true;
044                if (obj == null)
045                        return false;
046                if (getClass() != obj.getClass())
047                        return false;
048                final Pair<?, ?> other = (Pair<?, ?>) obj;
049                return equal(this.key, other.key) && equal(this.value, other.value);
050        }
051
052        private static final boolean equal(final Object one, final Object two) {
053                return one == null ? two == null : one.equals(two);
054        }
055
056        @Override
057        public String toString() {
058                return String.format("%s[%s, %s]", getClass().getSimpleName(), key, value);
059        }
060}