00001 package plp.expressions2.expression;
00002
00003 import plp.expressions2.memory.AmbienteCompilacao;
00004 import plp.expressions2.memory.AmbienteExecucao;
00005
00011 public abstract class ValorConcreto<T> implements Valor {
00012
00013 private T valor;
00014
00018 @Override
00019 public String toString() {
00020 return String.valueOf(valor);
00021 }
00022
00026 public ValorConcreto(T valor) {
00027 this.valor = valor;
00028 }
00029
00033 public T valor() {
00034 return valor;
00035 }
00036
00040 public boolean isEquals(ValorConcreto<T> obj) {
00041 return valor().equals(obj.valor());
00042
00043 }
00044
00048 public Valor avaliar(AmbienteExecucao amb) {
00049 return this;
00050 }
00051
00061 public boolean checaTipo(AmbienteCompilacao amb) {
00062 return true;
00063 }
00064
00065 @Override
00066 public int hashCode() {
00067 final int prime = 31;
00068 int result = 1;
00069 result = prime * result + (valor == null ? 0 : valor.hashCode());
00070 return result;
00071 }
00072
00073 @SuppressWarnings("unchecked")
00074 @Override
00075 public boolean equals(Object obj) {
00076 if (this == obj)
00077 return true;
00078 if (obj == null)
00079 return false;
00080 if (getClass() != obj.getClass())
00081 return false;
00082 final ValorConcreto<T> other = (ValorConcreto<T>) obj;
00083 if (valor == null) {
00084 if (other.valor != null)
00085 return false;
00086 } else if (!valor.equals(other.valor))
00087 return false;
00088 return true;
00089 }
00090
00091 }