package com.google.common.cache;

import com.google.common.annotations.Beta;
import com.google.common.annotations.GwtCompatible;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import java.util.Map.Entry;
import javax.annotation.Nullable;

@Beta
@GwtCompatible
public final class RemovalNotification<K, V> implements Entry<K, V> {
   @Nullable
   private final K key;
   @Nullable
   private final V value;
   private final RemovalCause cause;
   private static final long serialVersionUID = 0L;

   RemovalNotification(@Nullable K key, @Nullable V value, RemovalCause cause) {
      this.key = key;
      this.value = value;
      this.cause = (RemovalCause)Preconditions.checkNotNull(cause);
   }

   public RemovalCause getCause() {
      return this.cause;
   }

   public boolean wasEvicted() {
      return this.cause.wasEvicted();
   }

   @Nullable
   public K getKey() {
      return this.key;
   }

   @Nullable
   public V getValue() {
      return this.value;
   }

   public final V setValue(V value) {
      throw new UnsupportedOperationException();
   }

   public boolean equals(@Nullable Object object) {
      if (!(object instanceof Entry)) {
         return false;
      } else {
         Entry<?, ?> that = (Entry)object;
         return Objects.equal(this.getKey(), that.getKey()) && Objects.equal(this.getValue(), that.getValue());
      }
   }

   public int hashCode() {
      K k = this.getKey();
      V v = this.getValue();
      return (k == null ? 0 : k.hashCode()) ^ (v == null ? 0 : v.hashCode());
   }

   public String toString() {
      String var1 = String.valueOf(String.valueOf(this.getKey()));
      String var2 = String.valueOf(String.valueOf(this.getValue()));
      return (new StringBuilder(1 + var1.length() + var2.length())).append(var1).append("=").append(var2).toString();
   }
}
