001/* 002 * #%L 003 * Netarchivesuite - common 004 * %% 005 * Copyright (C) 2005 - 2014 The Royal Danish Library, the Danish State and University Library, 006 * the National Library of France and the Austrian National Library. 007 * %% 008 * This program is free software: you can redistribute it and/or modify 009 * it under the terms of the GNU Lesser General Public License as 010 * published by the Free Software Foundation, either version 2.1 of the 011 * License, or (at your option) any later version. 012 * 013 * This program is distributed in the hope that it will be useful, 014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 016 * GNU General Lesser Public License for more details. 017 * 018 * You should have received a copy of the GNU General Lesser Public 019 * License along with this program. If not, see 020 * <http://www.gnu.org/licenses/lgpl-2.1.html>. 021 * #L% 022 */ 023 024package dk.netarkivet.common.utils; 025 026import java.util.Map; 027 028/** 029 * A generic Map.Entry class, useful for returning key-value-like results. 030 * 031 * @param <K> the Object type used as key 032 * @param <V> the Object type used as value 033 */ 034public class KeyValuePair<K, V> implements Map.Entry<K, V> { 035 036 /** The key in this key-value pair. */ 037 private final K key; 038 /** The value in this key-value pair. */ 039 private final V value; 040 041 /** 042 * Constructs a Key-Value pair using the given key and value. 043 * 044 * @param k The key object 045 * @param v The value object 046 */ 047 public KeyValuePair(K k, V v) { 048 this.key = k; 049 this.value = v; 050 } 051 052 /** 053 * Returns the key corresponding to this entry. 054 * 055 * @return the key corresponding to this entry. 056 */ 057 public K getKey() { 058 return key; 059 } 060 061 /** 062 * Returns the value corresponding to this entry. 063 * 064 * @return the value corresponding to this entry. 065 */ 066 public V getValue() { 067 return value; 068 } 069 070 /** 071 * Replaces the value corresponding to this entry with the specified value (optional operation). 072 * 073 * @param newValue new value to be stored in this entry. 074 * @return old value corresponding to the entry. 075 * @throws UnsupportedOperationException if the <tt>put</tt> operation is not supported by the backing map. 076 */ 077 public V setValue(V newValue) throws UnsupportedOperationException { 078 throw new UnsupportedOperationException("Stand-alone entries cannot be changed"); 079 } 080 081}